VBA: like Methoden

09/08/2008 - 19:04 von Hans Alborg | Report spam
Hallo Gruppe,

Nutzt einer LIKE?

Excel07...
In einer Suchroutine verwende ich die LIKE- Funktion, um ohne viel Aufwand
die "Wildcards" >?< und >*< nutzen zu können (nur Teile des Suchbegriffs
eingeben).

In der Hilfe steht zu LIKE noch mehr, z.B. daß ich mit >[!AC]< Texte
ausschließen kann (wegen des "!") die z.B. zwischen A...C liegen.
Das hat bei mir keine Wirkung, ich mach's wohl falsch. Mein Suchstring sieht
etwa so aus:
"Ra* [!905]"
Ich möchte also alle Zellen finden, deren Zeichen mit "Ra" beginnen und wo
die Zeichenfolge "905" nicht enthalten ist.
Letzteres ist wohl eh' Wunschdenken, da in der Hilfe wohl stand "von Zeichen
bis Zeichen", also mathematisch, und nicht die Zeichenkette als solche.
Diese in Anführungszeichen zu setzen ist wohl nicht implementiert?

Naja, >?< und >*< funktionieren. Wie wende ich nun >[]< an und was geht noch
so Interessantes mit LIKE?


Hans
 

Lesen sie die antworten

#1 Peter Schleif
09/08/2008 - 20:32 | Warnen spam
Hans Alborg schrieb am 09.08.2008 19:04 Uhr:

"Ra* [!905]"
Ich möchte also alle Zellen finden, deren Zeichen mit "Ra" beginnen und wo
die Zeichenfolge "905" nicht enthalten ist.
Letzteres ist wohl eh' Wunschdenken, da in der Hilfe wohl stand "von Zeichen
bis Zeichen"



In meiner xl2002-Hilfe steht:

"Ein beliebiges einzelnes Zeichen,
das nicht in ZeichenListe enthalten ist."

Die Betonung liegt auf dem ersten Wort "Ein".
[!905] ist ein Platzhalter für *ein* Zeichen und _nicht_ für die
Zeichenkette "905" (bestehend aus *drei* Zeichen)

Was Du brauchst ist negative Lookahead/Lookbehind. Das gibt es in
VB/VBA aber nur bei regulàren Ausdrücken. Die bekommst Du mit einem
Verweis oder mit VBScript.RegExp. Die Umsetzung gehorcht nicht ganz
der sonst üblichen Syntax für regulàre Ausrücke und muss darum leicht
an VBA angepasst werden:

Peter

Sub nicht905()
Dim regex As Object

Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = "^Ra(?!.*905)"

Debug.Print regex.Test("Ra 904")
Debug.Print regex.Test("Ra 905")
Debug.Print regex.Test("Ra 906")
End Sub

Ähnliche fragen