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

Forumthread: Teilstring mit Platzhaltern suchen

Teilstring mit Platzhaltern suchen
10.10.2016 14:01:22
Joni
Hallo,
ich stehe mal wieder vor einer Herausforderung. Ich möchte aus einem String einen Teilstring, der Platzhalter enthält, finden und diesen Teilstring dann ausgeben. Ob der String überhaupt vorhanden ist lässt sich mir like prüfen, aber wie kann ich den gefundenen String ausgeben?
Beispiel
String AABBCCDD11223344
Suchstring B*DD*2 ergibt BBCCDD112 (1. B und 1. 2er)
Statt des Strings kann ich auch mit dem Beginnzeichen und der Länge leben. Es soll immer das erste Vorkommen zurückgegeben werden (wie bei instr). Wie könnte ich das anstellen? Danke für eure Hilfe.
Gruß Joni
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teilstring mit Platzhaltern suchen
10.10.2016 14:47:41
Daniel
Hi
im Zweifelsfall durch eine entsprechende Programmierung:

Sub test()
Dim Txt As String
Dim Such As String
Dim Ergebnis As String
Dim i As Long, L As Long
Txt = "AABBCCDD11223344"
Such = "B*DD*2"
If Txt Like "*" & Such & "*" Then
For i = 1 To Len(Txt)
If Mid(Txt, i) Like Such & "*" Then Exit For
Next
For L = Len(Txt) - i To 1 Step -1
If Mid(Txt, i, L) Like Such Then Exit For
Next
Ergebnis = Mid(Txt, i, L)
End If
MsgBox Txt & vbLf & Such & vbLf & Ergebnis & vbLf & "Start: " & i & ", Länge: " & L
End Sub

Anzeige
Merci die Erste
10.10.2016 15:29:44
Joni
Hallo Daniel,
klappt wunderbar. Ein kleine Anpassung war noch erforderlich, da ich ansonsten beim Rückwärtszählen den ersten Treffer und nicht den letzten erhalten hätte.
If Mid(Txt, i, L) Like Such And Not Mid(Txt, i, L - 1) Like Such Then Exit For
Danke und Gruß Joni
AW: Teilstring mit Platzhaltern suchen
10.10.2016 14:49:08
Uwe
Hallo Joni,
z.B. so:

Sub aaa()
Dim lngA As Long, lngE As Long, lngZ As Long
Dim strE As String, strS As String, strT As String
strS = "B*DD*2"
strT = "AABBCCDD11223344"
lngA = Application.WorksheetFunction.Search(strS, strT)
lngE = Len(strT)
Do Until Mid(strT, lngA, lngE) Like strS
lngE = lngE - 1
Loop
strE = Mid(strT, lngA, lngE) ' ergibt BBCCDD112
Debug.Print strE
End Sub
Gruß Uwe
Anzeige
Merci die Zweite
10.10.2016 15:30:55
Joni
Hallo Uwe,
auch das klappt. Es ist die gleiche Anpassung wie bei Daniel erforderlich.
Do Until Mid(strT, lngA, lngE) Like strS And Not Mid(strT, lngA, lngE - 1) Like strS
Danke und Gruß
Joni
AW: Regenechse
10.10.2016 14:57:27
Fennek
Hallo,
passt folgender Code?

Sub test()
Tx = "AABBCCDD11223344"
'Suchstring B*DD*2 ergibt BBCCDD112 (1. B und 1. 2er)
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "B.*DD.*?2"
Debug.Print .Execute(Tx)(0)
End With
End Sub
mfg
Anzeige
Merci die Dritte
10.10.2016 15:34:32
Joni
Hallo Fennek,
der Code hat auf anhieb funktioniert :-). Was mir nicht so gefällt ist, dass ich das Suchpattern für regexp anpassen muss. Da es immer anders aussehen kann müsste ich hierfür eine Logik bauen. Auf Grund der Alternativen werde ich darauf verzichten ;-).
Danke und Gruß
Joni
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Teilstring mit Platzhaltern suchen in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe in die VBA-Entwicklungsumgebung (ALT + F11).

  2. Erstelle ein neues Modul: Klicke im Menü auf "Einfügen" und wähle "Modul".

  3. Füge den folgenden Code ein:

    Sub SucheMitPlatzhaltern()
       Dim Txt As String
       Dim Such As String
       Dim Ergebnis As String
       Dim i As Long, L As Long
    
       Txt = "AABBCCDD11223344"
       Such = "B*DD*2"
    
       If Txt Like "*" & Such & "*" Then
           For i = 1 To Len(Txt)
               If Mid(Txt, i) Like Such & "*" Then Exit For
           Next
           For L = Len(Txt) - i To 1 Step -1
               If Mid(Txt, i, L) Like Such Then Exit For
           Next
           Ergebnis = Mid(Txt, i, L)
       End If
    
       MsgBox "Gefundener Teilstring: " & Ergebnis
    End Sub
  4. Passe den Suchstring an deine Bedürfnisse an. Hier kannst du Platzhalter wie * verwenden, um Teilstrings zu suchen.

  5. Führe den Code aus: Drücke F5 oder klicke auf "Ausführen".


Häufige Fehler und Lösungen

  • Fehler: Kein Ergebnis wird zurückgegeben.

    • Lösung: Überprüfe, ob der Suchstring korrekt formatiert ist und ob der Platzhalter * an den richtigen Stellen steht.
  • Fehler: Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs.

    • Lösung: Stelle sicher, dass der Suchstring und der Textstring nicht leer sind.
  • Fehler: Der Teilstring wird nicht korrekt gefunden.

    • Lösung: Achte darauf, dass du die Logik für das Rückwärtszählen anpasst, wie in den Beiträgen von Joni und Uwe erwähnt.

Alternative Methoden

Eine alternative Methode zur Suche mit Platzhaltern ist die Verwendung von Regulären Ausdrücken. Hier ein Beispiel:

Sub SucheMitRegEx()
    Dim Tx As String
    Tx = "AABBCCDD11223344"

    With CreateObject("vbscript.regexp")
        .Global = True
        .Pattern = "B.*DD.*?2"
        Debug.Print .Execute(Tx)(0)
    End With
End Sub

Diese Methode erfordert jedoch, dass du ein wenig mehr über reguläre Ausdrücke weißt.


Praktische Beispiele

  • Beispiel 1: Verwende den Code von Uwe, um einen Teilstring zu finden, der auf eine andere Weise formuliert ist:

    Sub BeispielUwe()
       Dim lngA As Long, lngE As Long
       Dim strS As String, strT As String
       strS = "B*DD*2"
       strT = "AABBCCDD11223344"
       lngA = Application.WorksheetFunction.Search(strS, strT)
       lngE = Len(strT)
    
       Do Until Mid(strT, lngA, lngE) Like strS
           lngE = lngE - 1
       Loop
       Debug.Print Mid(strT, lngA, lngE)
    End Sub
  • Beispiel 2: Verwende die Like-Anweisung in einer einfachen Excel-Formel. Zum Beispiel, um zu prüfen, ob ein Wert in einer Liste von Werten vorhanden ist.


Tipps für Profis

  • Nutze Wildcard-Zeichen wie * und ? effektiv, um flexiblere Suchanfragen zu erstellen.
  • Setze Reguläre Ausdrücke ein, wenn du komplexe Suchmuster benötigst.
  • Vermeide es, den Code unnötig zu komplizieren. Halte die Logik klar und einfach.

FAQ: Häufige Fragen

1. Wie kann ich Platzhalter in einer Excel-Formel verwenden?
Du kannst Platzhalter wie * in der WENN-Funktion oder SUMMEWENN-Formel verwenden, um nach Teilstrings zu suchen.

2. Was sind die Unterschiede zwischen Like und RegExp in VBA?
Like ist einfacher zu verwenden und eignet sich für grundlegende Suchen, während RegExp komplexere Muster unterstützt, jedoch mehr Kenntnisse erfordert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige