Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1164to1168
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

Wie zwei Strings vergleichen ?

Wie zwei Strings vergleichen ?
Holger
Hallo,
trotz Hitze muss ich hier weitermachen und da ich schreibe, habe ich
wie so oft mal wieder ein Problem ;).
In einer Zelle steht:
DE,ES,PT
In einer anderen Zelle einer anderen Datei könnte stehen:
1 DE,PT,ES,FR,IT oder PT,ES,DE
Oder
2 DE,ES
Nun möchte ich prüfen, ob in der zweiten Zelle alle Werte enthalten sind, die in
der ersten Zelle vorhanden sind.
In dem Beispiel würde im Fall 1 ein OK erscheinen, im Fall 2 ein NICHT OK, da PT fehlt.
Mit InStr geht es ja nicht, weil sobald eines gefunden wird, die Bedingung ja bereits erfüllt ist.
Ich stehe auf dem Schlauch. Denn die Reihenfolge darf auch keine Rolle spielen, nur
ob die Werte alle da sind oder nicht.
Mit Split Arrays draus machen u.Match vwenden! orT
09.07.2010 16:29:09
Luc:-?
Gruß+schöWE, Luc :-?
AW: Wie zwei Strings vergleichen ?
09.07.2010 16:38:56
ransi
HAllo Holger
Versuchs mal so:
 ABCD
1KriterienZelle  
2DE,ES,PTDE,PT,ES,FR,ITWAHR 
3 DE,ESFALSCH 
4 PT,ES,DEWAHR 
5    

Formeln der Tabelle
ZelleFormel
C2=machs(B2;$A$2)
C3=machs(B3;$A$2)
C4=machs(B4;$A$2)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
ransi
Anzeige
UDF() vergessen....
09.07.2010 17:02:02
ransi
HAllo
Diesen Code in ein Modul:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Function machs(Zelle, Kriterien) As Boolean
Dim vntZ As Variant
Dim vntK As Variant
Dim L As Long
machs = True
vntZ = Split(Zelle.Value, ",")
vntK = Split(Kriterien.Value, ",")
For L = LBound(vntK) To UBound(vntK)
    If UBound(Filter(vntZ, vntK(L))) = -1 Then
        machs = False
        Exit Function
    End If
Next
End Function


ransi
Anzeige
Lösung ohne VBA - trickreich und kniffelig
09.07.2010 17:46:05
NoNet
Hallo Holger,
nur der Vollständigkeit halber : es gibt auch eine Lösung ohne VBA, die allerdings recht "tricky" und knifflig ist.
Nehmen wir an, Du hast folgende Tabelle :
AB
1
2
3
4
5
6

Nun erstellst Du zunächst per Tastenkombination Strg+F3 einen Bereichsnamen :
Name : LaenderArray
Bezieht sich auf :=AUSWERTEN("{"&ZEICHEN(34)&WECHSELN($A$2;",";ZEICHEN(34)&"."&ZEICHEN(34))&ZEICHEN(34)&"}")
Bestätige diesen Namen mit  
Der Name enthält nun eine MATRIX (ARRAY) mit den nach Komma getrennten Länderkürzeln.
Gib nun in C2 folgende Funktion ein und bestätige diese mit Strg+Shift+ENTER (=MATRIX-Funktion) und kopiere sie dann soweit wie benötigt nach unten :

=SUMME(--ISTZAHL(SUCHEN(","&GLÄTTEN(INDEX(LaenderArray;ZEILE(INDIREKT("1:"&ANZAHL2(LaenderArray)));)) &",";","&WECHSELN(B2;" ";"")&",")))=ANZAHL2(LaenderArray)

Diese Funktion prüft, ob jedes einzelne Element des LaenderArray in der Zelle B2 (durch Komma getrennt, Leerzeichen entfernt) vorhanden ist.
Sobald die Anzahl der in B2 übereinstimmenden Länderkürzel mit denen des LaenderArray übereinstimmt, ist das Ergebnis WAHR, ansonsten FALSCH !
Hier ein Beispiel :
ABC
1
2
3
4
5
6

MATRIX-Funktionen (mit Strg+Shift+ENTER bestätigen)
ZelleFormel
C2   {=SUMME(--ISTZAHL(SUCHEN(","&GLÄTTEN(INDEX(LaenderArray;ZEILE(INDIREKT("1:"&ANZAHL2(LaenderArray)));))&",";","&WECHSELN(B2;" ";"")&",")))=ANZAHL2(LaenderArray) 
C3   {=SUMME(--ISTZAHL(SUCHEN(","&GLÄTTEN(INDEX(LaenderArray;ZEILE(INDIREKT("1:"&ANZAHL2(LaenderArray)));))&",";","&WECHSELN(B3;" ";"")&",")))=ANZAHL2(LaenderArray) 
C4   {=SUMME(--ISTZAHL(SUCHEN(","&GLÄTTEN(INDEX(LaenderArray;ZEILE(INDIREKT("1:"&ANZAHL2(LaenderArray)));))&",";","&WECHSELN(B4;" ";"")&",")))=ANZAHL2(LaenderArray) 
C5   {=SUMME(--ISTZAHL(SUCHEN(","&GLÄTTEN(INDEX(LaenderArray;ZEILE(INDIREKT("1:"&ANZAHL2(LaenderArray)));))&",";","&WECHSELN(B5;" ";"")&",")))=ANZAHL2(LaenderArray) 
C6   {=SUMME(--ISTZAHL(SUCHEN(","&GLÄTTEN(INDEX(LaenderArray;ZEILE(INDIREKT("1:"&ANZAHL2(LaenderArray)));))&",";","&WECHSELN(B6;" ";"")&",")))=ANZAHL2(LaenderArray) 

Und das Ganze nochmal als Screenshot :
Userbild
Gruß und schönes WE, NoNet
Anzeige
Lösung ohne VBA - ohne Trick
10.07.2010 18:53:03
FP
Hallo NoNet,
Tabelle3
 ABC
1DE, PT, ESFR, DE, IT, PT, ES, DKWAHR
2DE, PT, ESFR, DE, IT, ES, DKFALSCH
Formeln der Tabelle
C1 : {=ANZAHL(SUCHEN(LINKS(TEIL(WECHSELN(A1;", ";""); SPALTE(1:1)*2-1;2)&"  ";2); WECHSELN(B1;", ";"")))=LÄNGE(WECHSELN(A1;", ";""))/2}
C2 : {=ANZAHL(SUCHEN(LINKS(TEIL(WECHSELN(A2;", ";""); SPALTE(2:2)*2-1;2)&"  ";2); WECHSELN(B2;", ";"")))=LÄNGE(WECHSELN(A2;", ";""))/2}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Servus aus dem Salzkammergut
Franz
Anzeige
@FP: Ohne VBA - ohne Trick - ohne Sinn ?
10.07.2010 19:14:59
NoNet
Hey FP,
sorry, das "ohne Sinn" aus dem Betreff nehme ich natürlich zurück, aber so ganz einsatztauglich ist Deine Lösung dann aber doch nicht - siehe Zeilen 5 und 6 :
ABCD
1
2
3
4
5
6

Aber selbstverständlich traue ich Dir zu, dass Du diesen Fauxpas noch beheben kannst und wirst ;-))
Gruß, NoNet
Anzeige
immer diese Nörgler :-D
10.07.2010 19:33:04
FP
Hallo NoNet,
{=ANZAHL(FINDEN(LINKS(TEIL(WECHSELN(A1;", ";"");SPALTE(1:1)*2-1;2)&" ";2);WECHSELN(B1;", ";""))) =LÄNGE(WECHSELN(A1;", ";""))/2+(A1="") }
FINDEN statt SUCHEN ist hier angesagt, sonst würde ja DE = de sein, und DE ist für mich - trotz des verpassten Finales - wieder einmal ein großartiges Turnier gelungen.
Ich weiß: ihr Deutschen werdet das anders sehen, aber ich als Österreicher kann nur neidisch zu Euch hinüber blicken, wir qualifizieren uns ja nicht einmal :-(
Und ab Herbst müssen wir ja in der EM-Quali gegen Euch antreten, ich fürchte, da werden unsere Spieler ein ähnliches Bauchgefühl haben wie Eure gegen Spanien :D
Aber FALLS wir gegen Euch auch nur 1 Punkt machen, dann sind WIR die GRÖSSTEN!!! ( Zumindest ist es für einen kleinen Österreicher als wäre er Weltmeister geworden :D )
Servus aus dem Salzkammergut
Franz
Anzeige
Den 1 Punkt gönne ich euch, aber...
10.07.2010 20:06:39
NoNet
Hey Franz,
ich gönne Austria den 1 Heimpunkt gegen D - damit sollte D doch hoffentlich dennoch die EM2012-Quali schaffen...
Das Problem ist übrigens noch nicht gelöst :
nicht "de" oder "DE" oder "dE" oder "De" ist das Problem, sondern z.B. "ES" und "EST" oder "DE" und "ABCDE"....
Es sollten doch tatsächlich nur die Nationen verglichen werden, die auch tatsächlich in Spalte A vorhanden sind.
Und auch wenn String-mäßig "ES" in "EST" steckt, so liegt Spanien selbst geographisch nicht in Estland ;-)
So, und jetzt muss D erst noch gegen URU den 3.Platz sichern...
Gruß, NoNet
Anzeige
AW: Den 1 Punkt gönne ich euch, aber...
10.07.2010 20:33:25
FP
Hallo NoNet,
also:
1) DE ist der ISO-Code für Deutschland, und der ISO-Code für Estland ist EE - so wie alle ISO-Ländercodes nur aus 2 Buchstaben bestehen
2) EST ist das KFZ-Kz von Estland, das wäre dann D für Deutschland
3) man kann sich bei Suchbegriffen ja einmal verschreiben, dann gibt es auch manchmal kein Leerzeichen oder mehr als 1 Leerzeichen hinter einem Trennzeichen wie z.B. "," ( aber das Trennzeichen muss vorhanden sein )
all diese "Probleme" sollten mit dieser Formel keine sein
~f~
{=ANZAHL(FINDEN(LINKS(TEIL(formatiere_A&", ";SPALTE(1:1)*4-3;4)&" , ";4);B1))=(LÄNGE(formatiere_A) +2) /4}
und formatiere_A ist hier auch ein Name und bezieht sich auf:
=WECHSELN(WECHSELN(WECHSELN(Tabelle3!$A1;" ";" ");",";", ");" ";" ")
Und jetzt nichts wie ab zum Spiel und das Ziel muss heißen: Europa belegt Platz 1 - 3 bei der WM !
Jetzt wo ihr wieder einen MÜLLER habt ( wenn er auch nicht Gerd heißt ), sollte das doch zu schaffen sein :-)
Servus aus dem Salzkammergut
Franz
Anzeige
OT : Thomas Müller got it...
11.07.2010 00:37:41
NoNet
Hey Franz,
unabhängig sonstiger irdischer Probleme, denen ich gerade nicht folgen kann :
I think "Mueller got it" - und das ist JETZT() das Wichtigste ;-)
Gruß und "Good luck" für die EM-Quali,
NoNet
und es geht sogar viel kürzer...
10.07.2010 19:45:49
FP
Hallo NoNet,
... unter der Bedingung, dass das Format mit Trennung durch ", " ohne Ausnahme gilt - aber diese Bedingung gilt ohnehin auch bei meiner bisherigen Lösung auch.
{=ANZAHL(FINDEN(LINKS(TEIL(A1&", ";SPALTE(1:1)*4-3;4)&" , ";4);B1))=(LÄNGE(A1)+2)/4+(A1="")}
Servus aus dem Salzkammergut
Franz
und dann kann man sogar...
10.07.2010 19:48:50
FP
Hallo NoNet,
... auf die zusätzliche Prüfung auf A ist leer verzichten :-)
{=ANZAHL(FINDEN(LINKS(TEIL(A4&", ";SPALTE(4:4)*4-3;4)&" , ";4);B4))=(LÄNGE(A4)+2)/4}
Servus aus dem Salzkammergut
Franz
Anzeige
unklar
11.07.2010 15:34:59
Erich
Hi Franz,
deine Formel habe ich wohl nicht wirklich verstanden - so liefert sie bei mir in E4:E5 falsche Ergebnisse.
Ich stell mal meine Alternativen in Spalten C und D:
 ABCDE
1KriterienZelleFormel1 Formel2 Franz
2DE, ES, PTDE, PT, ES, FR, ITWAHRWAHRWAHR
3DE, ES, PTDE, ESFALSCHFALSCHFALSCH
4DE, ES, PTPT, ES, DEWAHRWAHRFALSCH
5DE, ES, PTES, DE, PTWAHRWAHRFALSCH

Formeln der Tabelle
ZelleFormel
C2{=ANZAHL(FINDEN(TEIL(A2;SPALTE(A2:INDEX(1:1;LÄNGE(A2)/4+0,5))*4-3;2); B2))=(LÄNGE(A2)+2)/4}
D2{=ANZAHL(FINDEN(TEIL(A2&", ";SPALTE(A2:INDEX(2:2;LÄNGE(A2)/4+0,5))*4-3;2); B2&", "))=(LÄNGE(A2)+2)/4}
E2{=ANZAHL(FINDEN(LINKS(TEIL(A2&", ";SPALTE(2:2)*4-3;4)&" , ";4); B2))=(LÄNGE(A2)+2)/4}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
ganz klar...
12.07.2010 08:07:31
FP
Hallo Erich,
es fehtl ja auch das 2. &", " ( für Spalte B )
{=ANZAHL(FINDEN(LINKS(TEIL(A2&", ";SPALTE(2:2)*4-3;4)&" , ";4); B2&", "))=(LÄNGE(A2)+2)/4}
Servus aus dem Salzkammergut
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige