dfmsbg
Goto Top

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.

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

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
screenshot_7

Content-Key: 585271

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

Printed on: April 20, 2024 at 02:04 o'clock

Member: NordicMike
NordicMike Jul 06, 2020 at 09:45:49 (UTC)
Goto Top
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).
Mitglied: 144705
144705 Jul 06, 2020 updated at 13:01:29 (UTC)
Goto Top
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:
Werte vergleichen die nicht 100 Prozent gleich sind
Kann man ja leicht in die Schleife über alle Werte einbauen.