Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1668to1672
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeichenketten vergleichen

Zeichenketten vergleichen
18.01.2019 23:51:44
Toni
Hallo Ihr!
Wenn man sich das Ganze im Kopf vorstellt, ist es immer ganz simpel, versucht man es dann konkret zu Papier zu bringen, wirds plötzlich tricky - so jedenfalls hier:
Eigentlich suche ich nur nach einer Möglichkeit die Zeichenketten zweier Zellen miteinander zu vergleichen (nur Zahlen getrennt durch Kommata) und Abweichungen in jeweils nur einer der beiden Zellen anzuzeigen.
Durch die Randbedingungen (s. in der Datei anbei) wirds komplexer ... Kern ist die Kennzeichnung der Abweichungen. Das Andere muss ich mir gegebenenfalls nach und nach anders zusammenklauben.
Würde mich natürlich über jeden Zugang erst einmal freuen!
Danke für Eure Unterstützung!
https://www.herber.de/bbs/user/126927.xlsx
Grüße
Euer Toni

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeichenketten vergleichen
19.01.2019 09:37:53
Hajo_Zi
Hallo Toni,
solltest Du Deine Beschreibung nicht genauer machen?
hier wäre D1 quasi wie A20 zu werten, G1 wie A35 u

in A20 und A35 steht nichts.
Ich bin nicht der Formelmensch, mir ist nur dieser Sachverhalt aufgefallen.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: Zeichenketten vergleichen
19.01.2019 10:21:24
Toni
Hallo Hajo,
ja vielleicht hast Du Recht, Danke für den Hinweis! Gemeint war es so:
weil ja immer 2 Zellen mit 4 Zellen Abstand (A5 mit A1, A6 mit A2 ...) verglichen werden sollen: wie verhält es sich an den Spaltenumbrüchen? Und da soll es nun so sein, dass, wenn eine Spalte endet (also im Beispiel Spalte A in Zeile 19) es nahtlos in D1 weiter geht. Man könnt quasi die belegten Zellen der 5 Spalten nehmen und sie untereinander in eine Spalte kopieren als eine zusammenhängende Spalte sehen und dann nacheinander die 5. mit der 1. Zelle, dann die 6. mit der 2. etc. vergleichen - bis zur letzten. Deswegen hatte ich auch die Formeln in Spalte B und E, dass erkennbar ist, welche Zellen verglichen werden sollen.
Ich fürchte, jetzt hab ich es restlos verbatzt. Nun wird es wohl keiner mehr verstehen, wie und was ...
Die Hoffnung stirbt im End Sub.
Grüße
Toni
Anzeige
AW: Zeichenketten vergleichen
19.01.2019 10:22:23
onur
Ist jede Zahl innerhalb der Zeile unique?
AW: Zeichenketten vergleichen
19.01.2019 10:24:57
Toni
Hallo Onur,
innerhalb der Zellen(Zeichenkette): ja!
Grüße!
Der absolute Oberhammer, Onur
19.01.2019 15:00:02
Toni
... ich hüpf hier grad im Kreis. Jetzt muss ichs 'nur noch' raffen. Gib mir bitte noch etwas Zeit dazu und zum Prüfen.
Hoffentlich hattest Du auch etwas Spaß daran. Hab vielen Dank!
Grüße
lucky Toni
Anzeige
AW: Der absolute Oberhammer, Onur
19.01.2019 16:46:16
Toni
Hallo Onur,
nach allen Tests die ich hier gemacht habe, macht der Code alles wie gewünscht, Super! Tausend Dank!
Mit dem Verstehen ists so eine Sache: im Nachhinein nach gefühlt 1000 Durchgängen: naja klar!, ob ich selbst drauf kommen würde: ganz sicher nicht, im Leben nicht! Das Ganze werde ich mir jetzt noch mehrmals zu Gemüte führen, in der Hoffnung, dass möglichst viel hängen bleibt und ich mich trotzdem wieder davon erhole :))
Eines wäre dabei sehr hilfreich: es gibt doch für das Nachvollziehen von Variablen das Direktfenster. Um mit F8 nachzuvollziehen, was wann in so ein Array geschaufelt wird: gibt es da analog eine Möglichkeit?
Ich bin noch immer ganz perplex und froh, dass Du da so eine Lösung gefunden hast. Wünsche Dir ein tolles Wochenende!
Danke!!!!
Toni
Anzeige
AW: Der absolute Oberhammer, Onur
19.01.2019 16:50:35
onur
Beim Array einfach auf das "+" neben dem Namen klicken und bei mehr als einer Dimension auf die "+" neben den einzelnen Elementen (z.B. "+ Arr(0)).
AW: Der absolute Oberhammer, Onur
19.01.2019 16:51:21
onur
Damit "klappst" du alles auf.
AW: Der absolute Oberhammer, Onur
19.01.2019 16:52:40
onur
Das alles bezog sich auf das "Lokalfenster"
Gefunden! Hilft ungemein. Wünsch Dir was!!!! owT
19.01.2019 16:57:01
Toni
AW: Der absolute Oberhammer, Onur
19.01.2019 21:16:51
Toni
sehr sehr cool!
das allein schon: wie ich bei unbekannter Spaltenlänge, mehrere Spalten der Reihe nach in ein Array einlese: Neu für mich:
            ze(i) = z
sp(i) = s

ich überleg noch, warum das hier, weil da doch noch nichts drin war. Ist das eventuell für die Performance besser, wenn man die leert vorher? Außerdem werden die eigentlich nie benutzt? doch nur Galerie? ;)
        Erase ArrVQ, ArrVZ, ZaQ, ZaZ, PosSep 'Arrays leeren
ReDim ArrVQ(0)
ReDim ArrVZ(0)
ReDim PosSep(0)
Genau!, wenn ich die im Array drin hab, brauch ich den Tabellenort nicht mehr, aber in echt gelöst seh ich das auch zum ersten Mal:
        txtQ = Cells(ze(ii - 4), sp(ii - 4)).Text '"ze(ii - 4)" statt "z-4", da "z-4" falsch wäre bei "Zeilenumbruch "
dieses found-Konstrukt war mir so auch neu (ist ja z.B. auch bei Mid und ähnlichem sehr hilfreich), mal abgesehen davon, dass ich InStr, Val und Trim noch nie benutzt habe und vorher überlegt habe wie ich denn je an die einzelnen abweichenden Zahlen in den Zellen ran kommen soll - also speicher ichs einfach in PosSep - einfach genial:
found = InStr(found + 1, txtZ, ",")
Dieses Boolean-Array verstehe ich noch nicht:
ZaZ(Val(arrZ(i))) = True 'Aus Text Zhlen machen und speichern
weil: im Lokalfenster steht ja für dieses Array nur wahr/falsch - aber die Zahl aus der Zeichenkette selbst muss ja auch noch irgend wie enthalten sein, sonst könnte er ja 'Zahl' nicht abgleichen:
                If Not ZaQ(zahl) And zahl > 0 Then 'Wenn Zahl nicht in Quellzelle enthalten und nicht 0
der ist glaub ich für die Galerie ^^:
                wort = Trim(arrQ(i)) 'Als Text speichern
Alles in allem so viel Neues und Interessantes, ich bin vollauf begeistert, was ich heute lernen durfte! Ich kann Dir nicht genug danken mein Lieber!
Grüße Toni
Anzeige
Zusatz
19.01.2019 21:18:11
Toni
... beim 2. Punkt meine ich ArrVZ und ArrVQ ...
AW: Zusatz
19.01.2019 22:13:11
onur
Ich weiss, deswegen schrieb ich:
"Ist aber, wie du bemerkt hast, nur Restmüll, den ich nicht "entsorgt" habe. Ich habe die Zahlenwerte später durch "Val(arrZ(i))" ersetzt, statt sie in ein Array zu speichern."
ArrVQ()und ArrVZ() standen für ArravValueZiel bzw ArravValueQuelle, aber mit "Val()" zu arbeiten, ist einfacher.
Yepp, passt, THKS Onur, gn8 owT
19.01.2019 22:15:59
Toni
AW: Der absolute Oberhammer, Onur
19.01.2019 21:52:04
onur
Erase leert die Arrays zwar, aber wenn das Array vorher bis z.B. Arr(100) ging, bleibt das auch dabei, nur die Werte werden z.B. bei Integer auf 0 und bei Strings auf "" gesetzt.
Erst die Redim-Anweisung setzt die Anzahl der Elemente auf 0 zurück.
Aber du hast Recht, "Erase ArrVQ, ArrVZ, PosSep" könnte man auch weg lassen (aber nicht die GANZE Zeile), da Redim ohne Preserve das Array auch zurücksetzt.
Ist aber, wie du bemerkt hast, nur Restmüll, den ich nicht "entsorgt" habe. Ich habe die Zahlenwerte später durch "Val(arrZ(i))" ersetzt, statt sie in ein Array zu speichern.
ZaZ(Val(arrZ(i))) = True 'Aus Text Zhlen machen und speichern

sollte heissen
ZaZ(Val(arrZ(i))) = True 'Zahl kommt im ZielText vor

- Mein Fehler.
"der ist glaub ich für die Galerie ^^" : - Stimmt, wenn man einen Code zig mal ändert, bleibt Restmüll.
Da der Text sowieso schon OHNE Leerzeichen gespeichert wurde, könnte man auch direkt nach arrZ(i) suchen, aber auf die Idee, alle Leerzeichen aus dem Text zu entfernen, kam ich erst später und habe vergessen, es zu ändern.
Anzeige
AW: Der absolute Oberhammer, Onur
19.01.2019 22:11:52
Toni
Onur, aber bitte richtig verstehen: nicht den Hauch einer Kritik oder sowas. Ist eher so wie ein Blinder im Gruselkabinett: ich kann mir das meiste einfach noch nicht erklären und vermute dann, und stocher sozusagen noch im Dunkeln.
Das mit dem Boolean hab ich jetzt glaube ich auch: da wird der Indizes zur Zahl selbst ... Deswegen wolltest Du auch wissen, ob die Zahl nur einmal vorkommt. Wo lernt man das eigentlich alles?
ich bleib dabei: Hammer!
und weiter so bitte!!
Grüße
Toni
AW: Der absolute Oberhammer, Onur
19.01.2019 22:23:28
onur
Ich habe es auch keinesfalls als Kritik verstanden, im Gegenteil, freut mich, dass du den Code so schnell verstanden hast und sogar Unstimmigkeiten erkennst.
"da wird der Indizes zur Zahl selbst " - genau, ist zwar Speicherverschwendung, aber bei Boolean ist das nicht SO schlimm, und so war es am Einfachsten.
Das Array geht bis 10000 - falls du grössere Zahlen hast, musst du das erhöhen.
"Wo lernt man das eigentlich alles?" - Sowas kann man nicht unbedingt lernen, man muss nur das Problem analysieen und in Teilprobleme auflösen.
Danach nach und nach alle Teilprobleme lösen und das Ganze miteinander verbinden.
Anzeige
AW: Der absolute Oberhammer, Onur
20.01.2019 08:57:05
Toni
Guten Morgen Onur, das zu lesen ermutigt mich!
Zum Teilezerlegen fehlt oft noch die Disziplin, weil man immer vom Ende her denkt und dann Einzelheiten zu leicht außer acht lässt - daran werde ich feilen, zumal es oft diese Einzelheiten sind, die es in sich haben. Und das, was man lernen kann, versuche ich weiter soweit ich da mitkomme aus diesem Forum von Dir und den Anderen heraus zu lesen. Ich bin einfach total froh, dass es diese Möglichkeit gibt.
Einen schönen sonnigen Sonntag Dir - zumindest hier in Berlin macht der Tag seinem Namen - wie's aussieht - alle Ehre
lG
Toni
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige