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-ID: 259524

Url: https://administrator.de/forum/excel-vba-strings-vergleichen-und-unterschiede-markieren-259524.html

Ausgedruckt am: 25.12.2024 um 02:12 Uhr

bastla
Lösung bastla 11.01.2015 aktualisiert um 19:12:38 Uhr
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
114757
114757 11.01.2015 aktualisiert um 19:06:45 Uhr
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
chef1568
chef1568 11.01.2015 um 19:50:39 Uhr
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