131 Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)

Hallo,

Range("A1") = InStr(1, "BE,DK,DE,FR,IT,LX,NL,AT,PL,CZ,", Range("B1"))

Die Zelle B1 ist leer. Ich würde als Ergebnis "0" erwarten erhalte aber "1". Das Leerzeichen ist in der Zeichenkette gar nicht vorhanden. "1" bedeutet doch, dass es die erste Stelle mit Übereinstimmung ist. Die erste Stelle ist aber doch "B" und nicht leer. Wenn B1=H, dann ergibt die Funktion richtigerweise =0.

Hat jemand einen Tipp? Danke und Gruss A.

4 Antworten

+1 Punkt
Beantwortet von xlking Experte (1.5k Punkte)
Bearbeitet von xlking

Hallo,

Wenn B1 leer ist wird nicht nach einem Leerzeichen gesucht, denn das wäre ja ein Zeichen " ". Stattdessen wird eine leere Zelle als Nullstring "" interpretiert. Und dieser Nullstring ist quasi ein nicht existenter Bereich im String, den du dir theoretisch dazu denken kannst. Wenn du z.B. "" & "B" & "" & E & "" verknüpfst, erhältst du "BE". Somit ist die Suche nach einem Nullstring mit der Suche nach einem beliebigen Zeichen gleichzusetzen, denn in der Theorie existiert dieser vor und hinter jedem Zeichen.  Deshalb wird die erstbeste Position im String wiedergegeben, und das ist, wenn du bei 1 beginnst die 1, wenn du bei 2 beginnst die 2 usw. Gleichzeitig funktioniert die Suche nach einem Wildcard "*" leider nicht, denn das wäre ja wieder selbst ein Zeichen.

So viel zur theoretischen Logik. Gemäß der Online-Hilfe ist definiert. "Rückgabe wenn string2 die Länge NULL aufweist: Start" Und genau das macht die Funktion.

Fazit. Prüfe mit einer If-Bedingung ob die Zelle Leer ist und reagiere darauf. Wenn sie nicht leer ist, dann kannst du Instr. im Else-Teil verwenden.

If Range("B1") = "" Then Range("A1").ClearContents Else Range("A1") = InStr(1, "BE,DK,DE,FR,IT,LX,NL,AT,PL,CZ,", Range("B1"))

Gruß Mr. K.

0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,

super Antwort und prima erklärt! Vielen Dank!!

VG A.
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

noch ein Hinweis: die "1" bei InStr(1, "BE,....) bedeutet nicht die 1. Übereinstimmung sondern die Startposition, ab der verglichen werden soll.

Bis später, Karin

0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Ok. Danke und bis später. A
...