Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Makro für Werte anhand Spaltenbezeichnung kopieren
#1
Hallo Zusammen

Ich bräuchte eure Hilfe! [Bild: smile.gif]

Gerne würde ich Werte von einem Tabellenblatt in ein anderes Kopieren (etwa in der Art wie es die Index-Formel macht). Dies jedoch mit einem VBA-Makro.

Das Makro soll folgendes machen:
- Zellenwert (Blatt 3) mit Wert aus Blatt 1 vergleichen (mit Hilfe der Kennung, die Spalte sollte anhand des Spaltentitels ermittelt werden)
- bereits vorhandene Kommentare löschen
- Ist gleich -> nichts unternehmen
- Ist nicht gleich -> alter Wert als Kommentar in die Zelle schreiben -> neuen Wert in Zelle in Blatt 3 schreiben -> Textfarbe auf rot ändern

Zum einfacheren Verständnis habe ich euch ein Beispiel-Excel angehängt. (Einmal als xlsm und einmal als xlsx für die, die keine fremden Makrodateien öffnen)

Wäre mega wenn wir das hier hinkriegen, freu mich schon aufs Endergebnis. Vielen Dank jetzt schon!


Angehängte Dateien
.xlsm   Beispiel_Attribute.xlsm (Größe: 15,29 KB / Downloads: 4)
.xlsx   Beispiel_Attribute.xlsx (Größe: 15,28 KB / Downloads: 3)
Antworten Top
#2
Hallo,


Zitat:Zellenwert (Blatt 3) mit Wert aus Blatt 1 vergleichen (mit Hilfe der Kennung, die Spalte sollte anhand des Spaltentitels ermittelt werden)

wofür soll denn das gut sein? Wenn Du die Spalten willkürlich anlegen willst, kannst Du ja auch nicht mehr so einfach kopieren denn die weiteren Spalten sind ja dann auch verschoben.
Einmal abgesehen davon das die Ausführungszeit wahrscheinlich exterm ansteigt.
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
Antworten Top
#3
Das Einfärben der Werte ist mir nicht ganz klar, da es nicht richtig zu fassen ist! Hier ist das Problem, dass nicht genau zu erkennen ist, wann das geschehen soll! Soll hier eingefärbt werden, wenn wirklich der Wert nur gefunden wird, oder soll das Datum im Kommentar auch abgeglichen werden! Da sobald das Makro ein zweites mal über den Bereich läuft natürlich der Wert gefunden wird! In der Beispieldatei wird das Makro mit einem Change- Ereignis aufgerufen, was unweigerlich dann zu den roten Werten führt! Außer du legts das Makro auf einen Button und kontrollierts somit das ganze...

Code:
Option Explicit

Sub neueWerte()
Dim FindSpalte As String
Dim SuchTab As Integer
Dim SuchBegriff As Variant
Dim Last As Integer, i As Integer, e As Integer
Dim Finden As Variant

Last = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

For e = 7 To Last
       
       For i = 3 To 6
       
       FindSpalte = Right(Cells(4, i).Value, 1)
       SuchTab = Left(Cells(4, i).Value, 1)
       
       Set Finden = Sheets(SuchTab).Range("F:F").Find(Range("A" & e).Value)
       
       If Finden <> "" Then SuchBegriff = Sheets(SuchTab).Range(FindSpalte & Finden.Row).Value
       
       If Finden <> "" And FindSpalte <> "E" Then ActiveSheet.Cells(e, i) = SuchBegriff: ActiveSheet.Cells(e, i).Font.Color = vbBlack
       
       If Finden <> "" And FindSpalte = "E" Then
       
               If SuchBegriff = ActiveSheet.Cells(e, i).Value Then
                       If Not ActiveSheet.Cells(e, i).Comment Is Nothing Then
                          ActiveSheet.Cells(e, i).Comment.Text Text:=Format(Now, "DD.MM.YYYY") & "   " & SuchBegriff
                          ActiveSheet.Cells(e, i).Comment.Visible = False
                       Else
                           ActiveSheet.Cells(e, i).Font.Color = vbRed
                           ActiveSheet.Cells(e, i).AddComment Text:=Format(Now, "DD.MM.YYYY") & "   " & SuchBegriff
                           ActiveSheet.Cells(e, i).Comment.Visible = False
                       End If
                End If
               
                If SuchBegriff <> ActiveSheet.Cells(e, i).Value Then
                ActiveSheet.Cells(e, i).Value = SuchBegriff
                ActiveSheet.Cells(e, i).Font.Color = vbBlack
                   If Not ActiveSheet.Cells(e, i).Comment Is Nothing Then ActiveSheet.Cells(e, i).Comment.Delete
                End If
       
       End If
       
       Next

Next

End Sub
Eine Menge reden, aber nichts sagen können viele...
[-] Folgende(r) 1 Nutzer sagt Danke an Frogger1986 für diesen Beitrag:
  • Andreas.ch
Antworten Top
#4
Hi, das sieht schon mal mega cool aus!! Vielen Dank!

Ja das habe ich vergessen zu erwähnen, das ganze möchte ich dann auf einen Button legen, somit gibt es klar eine Anweisung wann es ausgeführt werden soll.
Der Kommentar fügt es perfekt ein jedoch nicht im Feld welches sich verändert hat sondern weiter vorne. Somit sollte das ja mit dem roten Anfärben einfacher werden.
Im Kommentar wäre super wenn es wie eine Historie geben würde, also immer die neuste Aktualisierung zuoberst steht.

Bezüglich der Spalten, ich habe einfach etwas bedenken, dass beim Export die Spalten nicht gleich bleiben, da es hier eine gewisse Flexiblität in der Software gibt, deswegen
dachte ich, müsste man die Spalten anhand des Namen's im Export (der bleibt gleich) finden. Ist das so rechenintensiv?
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste