192 Aufrufe
Gefragt in Tabellenkalkulation von spezi01 Einsteiger_in (7 Punkte)

Hallo zusammen,

stehe vor ein Problem...

hab bereits ein Makro, dass mir zwei Tabellen vergleicht und Abweichungen in Tabelle 2 markiert. Leider beginnt es bei Zeile x und geht Zeile für Zeile vor.
Es soll aber erst anhand von 3 gleichen Eingangswerten (Spalte A, C und M) in der erste Tabelle die gleichen Werte finden und dann die ganze Zeile prüfen und in der zweiten Tabelle markieren.

Hoffe es ist nicht zu kompliziert
Anbei das beschriebene Makro

Danke schon mal...

Sub meinVergleich2()
Dim rngT1 As Range, blnDif As Boolean
Dim lngR As Long, lngC As Long, zz As Long, cc As Long

With Worksheets("Tabelle1_alt")
lngR = .Cells(.Rows.Count, 1).End(xlUp).Row
lngC = .Cells(1, .Columns.Count).End(xlToLeft).Column
Set rngT1 = .Range(.Cells(3, 1), .Cells(lngR, lngC))
End With

With Worksheets("Tabelle2_neu")
zz = .Cells(.Rows.Count, 1).End(xlUp).Row
If zz < lngR Then zz = lngR
With .Range(.Cells(3, 1), .Cells(zz, lngC))
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexNone
End With
.Range(.Cells(3, lngC + 2), .Cells(zz, lngC + 2)).ClearContents
For zz = 3 To lngR
blnDif = False
For cc = 1 To lngC
If .Cells(zz, cc) <> rngT1(zz - 2, cc) Then
.Cells(zz, cc).Font.ColorIndex = 3
.Cells(zz, cc).Interior.ColorIndex = 6
blnDif = True
End If
Next cc
If blnDif Then .Cells(zz, lngC + 2) = "x"
Next zz
zz = .Cells(.Rows.Count, 1).End(xlUp).Row
If lngR < zz Then
With .Cells(lngR + 1, 1).Resize(zz - lngR, lngC)
.Font.ColorIndex = 3
.Interior.ColorIndex = 6
End With
.Range(.Cells(lngR + 1, lngC + 2), .Cells(zz, lngC + 2)) = "x"
End If
End With
End Sub

3 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo,

wenn ich das richtig verstehe, soll das Makro so laufen:

  • In Tabelle 1 den oder die Datensätze suchen, die den Eingangswerten entsprechen.
  • Dann in Tabelle 2 den oder die entsprechenden Datensätze vergleichen und Abweichungen markieren.

Wie willst du die drei Eingangswerte eingeben? Stehen die irgendwo in der Tabelle? Oder willst du die Werte per Inputbox eingeben?

Gruß

M.O.

0 Punkte
Beantwortet von spezi01 Einsteiger_in (7 Punkte)

Hallo M.O.

ja, genau wie du beschrieben hast. Sollen aus Tabelle 2 anhand der Eingangswerte die Zeile in Tabelle 1 gefunden und geprüft werden.

Die Eingangswerte sind immer in (Spalte A, C und M)

wäre es besser eine neue Tabelle zu generieren mit der Tabelle 2 als Ausgangsbasis, da evtl. Zeilen, die nicht in Tabelle 1 gefunden werden als entfallen in die neue Tabelle mit zu kopieren und alle Zeilen die in Tab2 wenn Tab 1 Ausgangsbasis ist als neu markiert werden sollen.

Hoffe ich habs irgendwie verständlich hin bekommen.

Grüße spezi

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo spezi,

du hast leider immer noch nicht klargestelt, wo die Eingangswerte stehen. Dass diese mit den Spalten A, C umd M verglichen werden sollen, hast du ja schon in deiner Frage erklärt. Aber wie werden die Eingangswerte ermittelt? Was verstehst du unter den Eingangswerten?

Ich verstehe darunter, dass nur Datensätze, bei denen z.B. in Spalte A eine 3, in Spalte C eine 5 und in Spalte M eine 9 steht verglichen werden sollen. Und diese Eingangswerte müssen ja irgendwo festgelegt werden bzw. eingegeben werden.

Habe ich da etwas völlig falsch verstanden? Oder meinst du damit, dass die Eingangswerte z.B. in Spalte A1, C1 und M1 stehen?

Den Teil mit der neuen Tabelle generieren in deiner neuen Antwort habe ich leider überhaupt nicht verstanden!

Gruß

M.O.
...