na, Du bist lustig
23.06.2016 14:00:29
Michael
Michael,
hallo zusammen,
ich hatte von ZEILEN, nicht von Zellen gesprochen, und jetzt
- KANN es sein, daß A1 mit A2 verglichen wird,
- VIELLEICHT aber auch mit Y1,
- VIELLEICHT im gleichen, vielleicht aber auch in einem anderen Tabellenblatt...
Paß auf, Du mußt ja keine Originaldatei hochladen, aber zwei Tabellen mit erfundenen Werten sollten schon drin sein, damit wir wissen, worum es geht.
Matthias' Ansatz ist sehr hilfreich; ich habe ihn mal kurz aufgebohrt:
Sub machen_Aufrufen()
Call Machen(Range("A1"), Range("A2"))
End Sub
Sub Machen(r1 As Range, r2 As Range)
Dim x&, k1&, k2&
r1.Font.Color = 0
r2.Font.Color = 0
If MsgBox("Schriftfabe wurde zurückgesetzt," & vbLf & _
"jetzt die Zellen A1 und A2 vergleichen?" & vbLf & _
"Unterschiedliche Zeichen an gleicher Stelle werden blau gefärbt", _
vbYesNo, " für Michael ;-)") = vbYes Then
k1 = Len(r1): k2 = Len(r2)
If k1 k2 Then
r2 = r2 & String(k1 - k2, Chr(127))
End If
For x = 1 To Len(Cells(1, 1))
If Mid(r1, x, 1) Mid(r2, x, 1) Then
r1.Characters(x, 1).Font.Color = vbBlue
r2.Characters(x, 1).Font.Color = vbBlue
End If
Next
End If
End Sub
Wenn Du in der unteren Sub die Msgbox entfernst, kannst Du sie variabel einsetzen und die Aufrufe nach Deinen Bedürfnissen gestalten.
Die beiden Zeilen mit
r1 = r1 & String(k2 - k1, Chr(127))
sind kritisch; normalerweise will man ja bei so einem Vergleich nicht die Daten ändern, d.h. Du ersetzt statt mit chr(127) nur mit " " oder gar nicht, das wäre dann so:
Sub machen2_Aufrufen()
Call Machen2(Range("A1"), Range("A2"))
End Sub
Sub Machen2(r1 As Range, r2 As Range)
Dim x&, k1&, k2&, kMin&
r1.Font.Color = 0
r2.Font.Color = 0
k1 = Len(r1): k2 = Len(r2)
kMin = WorksheetFunction.Min(k1, k2)
For x = 1 To kMin
If Mid(r1, x, 1) Mid(r2, x, 1) Then
r1.Characters(x, 1).Font.Color = vbBlue
r2.Characters(x, 1).Font.Color = vbBlue
End If
Next
If k1 k2 Then
For x = kMin + 1 To k1
r1.Characters(x, 1).Font.Color = vbBlue
Next
End If
End Sub
Das ist völlig variabel, auch über verschiedene Blätter hinweg, z.B. so:
Call Machen2(Tabelle1.Range("A1"), Tabelle2.Range("A1"))
Schöne Grüße,
Michael