Hallo Forum,
ich habe Strings in denen irgendwann ein # gefolgt von 1-5 Ziffern vorkommen kann.
in etwa:
öjDNBV HNDFPOJWN HE8)$ #1847 gsjsbndj jebn jsks
Diesen Bereich möchte ich abfragen.
Vor und nach dem zu filternden Bereich können alle möglichen Zeichen (außer #) stehen. Auch die Länge ist immer unterschiedlich. Sollte kein #xxx vorkommen soll der string unverändert übernommen werden.
Ich habe daran gedacht die instr Funktion zu verwenden um die Stelle des # zu identifizieren und in der Mid Funktion als start zu setzen. Wie kann ich aber den Stop definieren? das auf die Ziffern folgende Leerzeichen ist nie das erste und könnte das 3. aber auch das 20. sein.
hat jemand einen Hinweis?
grüße
David
ZitatWie kann ich aber den Stop definieren?
Nun, das gesuchte Leerzeichen wäre das erste nach der Raute. Du müsstest also Instr, Mid, Len & Co. etwas mehr verknüpfen und schachteln.
Deutlich eleganter und mächtiger kann man so etwas über reguläre Ausdrücke lösen: "Intelligente" Textanalyse (https://www.ms-office-forum.net/forum/showthread.php?t=256917)
Zitatein # gefolgt von 1-5 Ziffern
' Muster für Suche
sPattern = "#\d{1, 5}"Wenn Dein unübersichtlicher String aus einer Eigenverkettung kommt (unvollständige Datensätze per Abfrage filtern (https://www.access-o-mania.de/forum/index.php?topic=24970.msg147751#msg147751)), hast Du etwas in der Abfolge falsch gemacht.
danke für dienen hinweis aber ich komme da nicht weiter.
ich stelle mir vor in das Abfragefeld die funktion : feldname: regexp([suchfeldname], "suchfilter") eigeben zu müssen
-
richtig?
habe ein neues VBA modul angelegt, die Bibliothek aktiviert und den code aus deiner beschreibung hineinkopiert:
Public Function fChangeText(sText As String) As String
Dim regex As Object
Set regex = CreateObject("Vbscript.Regexp")
With regex
.Pattern = "\D" ' löscht alles außer Ziffern
'.Pattern = "[^0-9,]" ' löscht alles außer Ziffern und Komma
'.Pattern = "[^a-zA-ZäöüßÄÖÜ]" ' löscht alles außer Buchstaben
.Global = True ' Jedes Auftreten wird berücksichtigt
fChangeText = .Replace(sText, "")
End With
Set regex = Nothing
End Function
Debug.Print fChangeText("Ich möchte nur die Ziffern aus 12-4.56/444.5 haben.")
-> "124564445"
der ist für mein Problem aber scheinbar nicht passend.
Um ehrlich zu sein wollte ich gar nicht so tief in das Thema einsteigen. ich wäre dankbar für eine etwas detailliertere Hilfe.
Grüße
David
Zitatden code aus deiner beschreibung hineinkopiert
Spaßvogel. Da gibt es mehr als EINEN Code, vor allem auch Raum für eigene Überlegungen.
Zitathat jemand einen Hinweis?
Hinweis wird wohl unterschiedlich interpretiert. Ich brauche nicht extra zu betonen, dass ich ehrlich bin - man hört das zuweilen deutlich heraus. Die Bitte Hinweis nehme ich da wörtlich.