Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA .Find funktioniert nicht - kuriosen Grund gefunden

Forumthread: VBA .Find funktioniert nicht - kuriosen Grund gefunden

VBA .Find funktioniert nicht - kuriosen Grund gefunden
13.06.2025 05:25:57
Klexy
Mal wieder eine besondere Besonderheit, die mich graue Haare gekostet hat.

In der Beispieldatei ist eine Tabelle mit 2 Spalten: GVL und VE
https://www.herber.de/bbs/user/177752.xlsx

Wenn ich unten in den VBA-Direktbereich (Strg+G) folgendes reinschreib, kommt korrekt das Ergebnis "1"
? Rows("1:1").Find(What:="GVL", After:=Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Column

Wenn ich aber nach der zweiten Spalte suche
? Rows("1:1").Find(What:="VE", After:=Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Column

kommt eine Fehlermeldung, obwohl alle Prüfverfahren und Vergleiche bestätigen, dass da genau "VE" drin steht. (Ich hab schon mal erlebt, dass ein ö kein ö war, sondern nur wie ein ö ausgeschaut hat, in Wirklickeit aber aus 2 Zeichen bestand, die mit LÄNGE(A1) auch als 2 erkannt wurden - das aber nur am Rande)

Der Grund ist, dass die Spalte A als "Standard" formatiert ist, aber die Spalte B als "Benutzerdefiniert>": _(* #.##0_);_(* (#.##0);_(* "-"??_);_(@_)
Es handelt sich um eine Abfrage aus einem CRM-System. Alle Spalten außer dieser einen sind als Standard formatiert.
Welches der Formatierungs-Elemente das .Find-Problem verursacht, hab ich nicht recherchiert. Und wie diese Formatierung genau funktioniert, versteh ich auch nicht (kein Bedürfnis um diese Uhrzeit da reinzutauchen), aber sie bewirkt, dass eine Zahl mit Tausender-Trennzeichen und auf eine Ganzzahl gerundet dargestellt wird. Und zusätzlich dass sie zwangsweise rechtsbündig und um 0,5 eingerückt dargestellt wird. Was man nicht alles machen kann, um ein einfaches #.##0 zu vermeiden ...
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA .Find funktioniert nicht - kuriosen Grund gefunden
13.06.2025 06:30:48
Piet
Halo
bitte ändere xlValues in xlFormulas, damit klappt es. Höfliche Bitte, frage mich bitte Nicht warum?

mfg Piet
Das liegt an...
13.06.2025 10:31:39
Case
Moin, :-)

... folgendem: ;-)

Das geht: ;-)
? Rows("1:1").Find(What:=" VE ", After:=Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Column


Mache im Direkt-Fenster: ;-)
? Len(Range("B1").Text)


Ergibt 4.

Oder mache es so: ;-)
For i = 1 To Len(Range("B1").Text)

Debug.Print i, Asc(Mid(Range("B1").Text, i, 1))
Next i

Ausgabe: ;-)
1 32
2 86
3 69
4 32

Also Leerzeichen, V, E und noch ein Leerzeichen. ;-)

Deshalb funktioniert dann auch xlPart. ;-)

Beachte auch die Bemerkungen: ;-)
https://learn.microsoft.com/de-de/office/vba/api/excel.range.find

Servus
Case
Anzeige
sehr lehrreich
13.06.2025 17:10:58
Klexy
Dass =LÄNGE(B1) als Formel und Len(Range("B1").Text) in VBA unterschiedliche Ergebnisse haben können, hätte ich jetzt auch nicht gedacht.
Allerdings ist mir diese Variante auch noch nie untergekommen. Ich habe nur Len(Range("B1")) und Len(Range("B1").Value) ausprobiert und die ergeben beide 2
Es bezieht sich die Variante ".Text" also nicht auf den Wert (z.B. 2,5), sondern auf die Zahlenformatierung (z.B. 2,5 als Ganzzahl ergibt 3)
Und der .Find geht nicht auf den Wert sondern auf das Zellformat.
Interessant
Anzeige
AW: VBA .Find funktioniert nicht - kuriosen Grund gefunden
13.06.2025 10:42:55
Daniel
Hi

In der .FIND-Funktion steckt eine kleine Irreführung.

Mit LookIn:=xlvalues sucht du nicht in den unformatierten Zellwerten wie es xlValues vermuten lässt, sondern in den formatierten, dh so wie tatsächlich angezeigten, Texten. (Korrekterweise müsste die Systemkonstante "xlText" benannt sein)

Wenn du also ein bestimmtes Zahlenformat, welches ja auch Texte beeinflussen kann, in den Zellen vorgegeben hast, musst du das beim Suchwert berücksichtigen.

Erschwerend kommt hinzu,dass man in bestimmten Fällen (Zahl, Datum) dann auch in einem Deutschen Excel den Suchwert im amerikanischen Format vorgeben muss.

Alternativ kannst du hier versuchen mit lookIn:=xlformulas zu suchen, denn auch Konstanten sind Formeln, nur das bei Konstanten Wert und Formel gleich sind,
Oder, wenn sich die Suche auf einen einzeiligen oder einspaltigen Bereich beschränkt, die Position mit Application.Match (entspricht der Excelfunktion Vergleich) ermitteln, denn dieses sucht in den unformatierten Zellwerten, da es eine Excelfunktion ist.

Gruß Daniel
Anzeige
Fazit
13.06.2025 17:21:01
Klexy
Danke an alle. Hab viel gelernt aus den Antworten.

In der Praxis werde ich aber auf eine Hausfrauenlösung zurückgreifen, nämlich vorher
Rows("1:1").NumberFormat = "General"

Denn warum auch immer jemand diese seltsame Formatierung erstellt hat, in der Titelzeile hat sie definitiv nix verloren.
Anzeige
Danke.
13.06.2025 17:13:05
Klexy
viel gelernt
AW: VBA .Find funktioniert nicht - kuriosen Grund gefunden
13.06.2025 09:56:03
BoskoBiati
Hi,

mit xlPart statt xlWhole funktioniert es auch.

? range("B1").Value ergibt seltsamer- und korrekterweise VE

Gruß

Edgar
hilft leider nicht
13.06.2025 16:57:49
Klexy
denn es gibt noch einen Wert "VE bla", der da im Weg steht.
Trotzdem danke.
Anzeige
interessant
13.06.2025 16:55:26
Klexy
-

Forumthreads zu verwandten Themen