Hallo Anne,
[quote]Das Problem ist, dass die Tabelle dynamisch ist, sprich Zeile 3 in der Tabelle alt, wird nie Zeile 3 in Tabelle neu sein[/quote] genau das kann ja diese Formel in Verbindung mit der bedingten Formatierung. Ich komme mit den Formeln
=ZÄHLENWENN(Report_Alt!A:A;A1)=0
=ZÄHLENWENN(Report_Alt!D:D;D1)=0
in der bedingten Formatierung auf das selbe Ergebnis wie mit VBA. Nur ist das halt IMHO viel praktischer, vorallem wenn man mit andern Menschen zusammenarbeitet (weil die Menschen das eher/besser kennen als VBA und weil die bedingte Formatierung auch nicht standardmäßig deaktiviert ist, und weil bedingte Formatierung keine Sicherheitsprobleme/Ängste auslöst ...)
=================
zu VBA:
sorry: Missverständnis. Wenn du die 1 im Code durch die 4 ersetzt, dann war nur die eine Zeile falsch. Hier mal der Code mit einer Variablen für die Spalte. Jetzt siehst du genau, wo ich die Variable benutzt habe.
Du kannst natürlich alles andere machen, als die Spalte über eine Inputbox einzugeben. Jetzt wird jedenfalls immer die gleiche Spalte auf den beiden Tabellenblättern verglichen.
Wenn du die Spalten A vergleichen möchtest, dann gibst du 1 an, für Spalte D eben 4.
Im Code siehst du jetzt genau wo überall "Spalte" steht. Da werden die Spaltennummern definiert.
Was anderes:
vntIn = wks1.UsedRange.Value
funktioniert immer. Wenn man allerdings keine Einträge in Spalte A hat, hat der "UsedRange" die Spalte A auch nicht mit dabei (leider stimmt das auch wieder nur meistens). Greifst du dann auf Elemente der Variablen vntIn mit Zeilen- und Spaltenummer so zu vntIn(Zeile, Spalte), dann stimmt die Spaltennummer nicht. Das gibt Probleme im Zusammenspiel mit dem restlichen Code.
Das selbe Problem besteht mit der Zeilennummer, wenn in Zeile 1 nichts steht. Damit da nichts schief läuft, habe ich das in deinem Code so abgeändert, dass du da in keinen Fehler rein läufst.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | Option Explicit
Sub UnterschiedeIn2Färben()
Dim vntIn As Variant
Dim objDic As Object
Dim i&, Spalte As Long
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Set wks1 = ThisWorkbook.Worksheets( "Report_Alt" )
Set wks2 = ThisWorkbook.Worksheets( "Report_Neu" )
Set objDic = CreateObject( "Scripting.Dictionary" )
With wks1.UsedRange
vntIn = Range(wks1.Cells(1, 1), wks1.Cells(.Row + .Rows.Count - 1, .Column + .Columns.Count - 1)).Value
End With
Spalte = InputBox( "git die Spaltennummer an" , , 4)
For i = LBound(vntIn, 1) To UBound(vntIn, 1)
If Not objDic.Exists(vntIn(i, Spalte)) Then
objDic.Add vntIn(i, Spalte), ""
End If
Next
For i = 1 To wks2.Cells(Rows.Count, Spalte). End (xlUp).Row
If Not objDic.Exists(wks2.Cells(i, Spalte).Value) Then
wks2.Cells(i, Spalte).Interior.ColorIndex = 3
End If
Next
End Sub
|
klappt's?
Grüße, Ulrich
|