Clever-Excel-Forum

Normale Version: VBA Makro für Werte anhand Spaltenbezeichnung kopieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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!
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.
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
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?