Zellen vergleich
Guten Abend Community,
Ich habe ein Anliegen.
Ich habe eine Tabelle (2000 Zeilen)
Hier sollen in jeder Zeile, 2 Zellen miteinander verglichen werden.
Wenn diese 2 Zellen, nur einen geringen Unterschied aufweisen, soll mir das angezeigt werden oder anders rum.
Ich habe unten ein Beispiel wie Ich es Meine.
Ich habe auch durch die Hilfe eines Freundes bereits einen Code.
Das funktioniert soweit auch.
Aber bei Fällen wie:
Der eine Name enthält Bindestriche = großer Fehler (sollte ein kleiner sein)
oder
Spalte A Gisela Maier Spalte B Gisela Maier Helmut Maier
Hier ist auch ein großer Unterschied obwohl es ein kleiner sein sollte.
oder hier Spalte A Artur Sofin Spalte B Timo Sofin
müsste ein kleiner sein
Auch bei Klammern kommt ein großer Fehler
Habt Ihr da vielleicht eine Idee ?
Danke für eure Hilfe.
Liebe Grüße
MSBG
Ich habe ein Anliegen.
Ich habe eine Tabelle (2000 Zeilen)
Hier sollen in jeder Zeile, 2 Zellen miteinander verglichen werden.
Wenn diese 2 Zellen, nur einen geringen Unterschied aufweisen, soll mir das angezeigt werden oder anders rum.
Ich habe unten ein Beispiel wie Ich es Meine.
Ich habe auch durch die Hilfe eines Freundes bereits einen Code.
Sub Main
for i = 1 to cells(rows.count, 1).end(xlup).row
if instr(1, lcase(cells(i,1)), lcase(cells(i,2))) > 0 then
cells(i,4) = "kleiner Unterschied"
else
cells(i,4) = "großer Unterschied"
endif
next i
End Sub
Aber bei Fällen wie:
Der eine Name enthält Bindestriche = großer Fehler (sollte ein kleiner sein)
oder
Spalte A Gisela Maier Spalte B Gisela Maier Helmut Maier
Hier ist auch ein großer Unterschied obwohl es ein kleiner sein sollte.
oder hier Spalte A Artur Sofin Spalte B Timo Sofin
müsste ein kleiner sein
Auch bei Klammern kommt ein großer Fehler
Habt Ihr da vielleicht eine Idee ?
Danke für eure Hilfe.
Liebe Grüße
MSBG
2 Antworten
- LÖSUNG NordicMike schreibt am 06.07.2020 um 11:45:49 Uhr
- LÖSUNG 144705 schreibt am 06.07.2020 um 14:36:36 Uhr
LÖSUNG 06.07.2020 um 11:45 Uhr
Für solche Zwecke ist der instr Befehl nicht geeignet.
https://www.w3schools.com/asp/func_instr.asp
Kurz: Es wird ein String in einem String durchsucht. Du wertest das Ergebnis aus. Wenn das Ergebnis 0 ist, kommt String 2 nicht in String 1 vor. Wenn das Ergebnis 1 ist, kommt String 2 gleich am Anfang von String 1 vor. Wenn das Ergebnis 2 oder höher ist, kommt String 2 irgendwo in der Mitte von String 1 vor. String 2 muss also absolut übereinstimmend vorkommen und lässt keine Entscheidung zu wie Bindestriche oder andere Zeichen darin zu behandeln sind.
Du könntest nur eines machen, dass du die zwei zu vergleichenden Strings schon vorher von allen Bindestrichen und anderen Zeichen entledigst und dann erst zum instr schickst.
Ist jedoch der Text im String 2 länger, als in String 1, wird das Eregebnis immer 0 sein. Ein längerer String kann ja nicht in einem kürzeren String enthalten sein. Wenn du es auf die Spitze treiben willst, machst du noch einen zweiten Befehl und drehst die Suche um, also instr(1,string 2,string1).
https://www.w3schools.com/asp/func_instr.asp
Kurz: Es wird ein String in einem String durchsucht. Du wertest das Ergebnis aus. Wenn das Ergebnis 0 ist, kommt String 2 nicht in String 1 vor. Wenn das Ergebnis 1 ist, kommt String 2 gleich am Anfang von String 1 vor. Wenn das Ergebnis 2 oder höher ist, kommt String 2 irgendwo in der Mitte von String 1 vor. String 2 muss also absolut übereinstimmend vorkommen und lässt keine Entscheidung zu wie Bindestriche oder andere Zeichen darin zu behandeln sind.
Du könntest nur eines machen, dass du die zwei zu vergleichenden Strings schon vorher von allen Bindestrichen und anderen Zeichen entledigst und dann erst zum instr schickst.
Ist jedoch der Text im String 2 länger, als in String 1, wird das Eregebnis immer 0 sein. Ein längerer String kann ja nicht in einem kürzeren String enthalten sein. Wenn du es auf die Spitze treiben willst, machst du noch einen zweiten Befehl und drehst die Suche um, also instr(1,string 2,string1).
LÖSUNG 06.07.2020, aktualisiert um 15:01 Uhr
Wenn diese 2 Zellen, nur einen geringen Unterschied aufweisen, soll mir das angezeigt werden oder anders rum.
Das Vergleichen von Strings auf Ähnlichkeit nennt man Levenshtein-Distanz und die lässt sich sogar "exakt" ermitteln indem man die nötigen Einfüge- und Löschoperationen zum erreichen des Zielwerts zählt, hier dazu in VBA gefunden:https://administrator.de/forum/werte-vergleichen-nicht-100-prozent-31816 ...
Kann man ja leicht in die Schleife über alle Werte einbauen.