chef1568
Goto Top

Excel VBA - Strings vergleichen und Unterschiede markieren

Hallo,

ich schreibe mir gerade ein VB-Script für Excel dass 2 XML-Dateien miteinander vergleicht und die Unterschiede in einer Exceldatei ausgibt.
Derzeit vergleiche ich den gesamten Zelleninhalt und markiere en ganzen Text farbig.

Beispiel:
....
'Prüfe ob Werte identisch --> Unterschiede farbig kennzeichnen  
   For i = r + 2 To r + 10
      If Not .Rows(i).Cells(3).Value = .Rows(i).Cells(2).Value Then
         .Rows(i).Cells(3).Font.Color = -16776961   'Textfarbe: rot  
      End If
   Next
Ergebnis:
00 01 05 A1 FF
00 01 07 A1 FF


Jetzt möchte ich jedoch noch einen Auswertung hinzufügen, die in einem bestimmtes Feld nur die inhaltliche Unterschiede (einer HEX-Codierung) kennzeichnet:
Zelle 1 (Beispiel: .Rows(i + 12).Cells(2).Value): 00 01 05 A1 FF
Zelle 2 (Beispiel: .Rows(i + 12).Cells(3).Value): 00 01 07 A1 FF


Wie kann ich dies lösen?

Content-Key: 259524

Url: https://administrator.de/contentid/259524

Printed on: April 16, 2024 at 19:04 o'clock

Member: bastla
Solution bastla Jan 11, 2015 updated at 18:12:38 (UTC)
Goto Top
Hallo chef1568!

Soferne die Schreibweise der Hex-Werte Deinem Beispiel entspricht, etwa so:
Hex1 = Split(.Rows(i + 12).Cells(2).Value)
Hex2 = Split(.Rows(i + 12).Cells(3).Value)
For j = 0 To UBound(Hex1)
    If Hex1(j) <> Hex2(j) Then
        .Rows(i + 12).Cells(3).Characters(Start:=j * 3 + 1, Length:=2).Font.Color = vbRed
    End If
Next
Alternativ könnte auch ein zeichenweiser Vergleich erfolgen, dann würde aber in Deinem Beispiel nur die 7 rot geschrieben werden ...

Grüße
bastla
Mitglied: 114757
114757 Jan 11, 2015 updated at 18:06:45 (UTC)
Goto Top
Wenns ein einfacher String zu String -Vergleich sein soll geht auch das
Sub CompareStrings(rng1 As Range, rng2 As Range)
    For i = 1 To Len(rng2.Value)
        If Mid(rng2.Value, i, 1) <> Mid(rng1.Value, i, 1) Then
            rng2.Characters(i, 1).Font.Color = vbRed
        End If
    Next
End Sub

Sub Vergleichstest()
    CompareStrings Range("A1"), Range("A2")  
End Sub
Im Beispiel wird der Inhalt von A1 mit A2 verglichen, aber die Prozedur kannst du ja in deiner Schleife benutzen

Gruß jodel32
Member: chef1568
chef1568 Jan 11, 2015 at 18:50:39 (UTC)
Goto Top
genau das habe ich gebraucht!

Ich habe zwar den Code noch um einiges aufwändiger gestalten müssen aber in den Grundzügen hat es perfekt funktioniert!

Danke