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

Forumthread: Platzhalter in String verwenden

Platzhalter in String verwenden
17.05.2018 18:31:29
Martin
Hallo liebe Forumsmitglieder,
ich möchte gern einen String nach dem letzten enthaltenen Datum durchsuchen (es sind mehrere vorhanden). Da das Datum sich unterscheiden kann, war bislang meine Überlegung, die SUCHEN-Funktion in Excel zu benutzen (nicht VBA). Da diese allerdings die Zeichenkette immer von links durchsucht, dachte ich, dass ich eine Inverse Funktion mit VBA baue in der Form:
Function SUCHEN_INV(Search_Text As String, Search_Range As Excel.Range) As Integer
SUCHEN_INV = InStrRev(Search_Range.Value, Search_Text, -1)
End Function

Leider kann ich dort keinen Platzhalter wie "?" für den Search_Text String verwenden, d.h. konkret: "?.?.?". Die Fragezeichen sollen die beliebigen Zahlen des Datums ersetzen (Tag.Monat.Jahr). In der Funktion SUCHEN funktioniert das noch.
Kann mir jemand weiterhelfen, wie ich in dem String mit den Platzhaltern ein Ergebnis bekomme? Damit habe ich bislang in VBA nicht gearbeitet.
Bsp. String zum Testen: "Datum 1 16.05.2018, Datum 2 17.05.2018, usw." müsste, wenn das Makro funktioniert, 29 ergeben.
Grüße
Martin
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Platzhalter in String verwenden
17.05.2018 18:45:27
ChrisL
Hi Martin
Ich taste mich selber auch erst an das Thema ran, aber ich denke "RegEx" könnte helfen.
Siehe Archiv z.B.
https://www.herber.de/forum/archiv/1564to1568/1564456_Regex_in_VBAExcelUmgebung_mit_assertions.html
https://www.herber.de/forum/archiv/896to900/898349_suchen_mit_Regexp.html
z.B. hier kannst du Pattern testen:
https://regex101.com/
Und der Pattern für Datum ist gemäss Test:
"\d{2}.\d{2}.\d{4}"
Den Datumsstring kannst du mit Split() teilen und den letzten Datumswert auslesen.
cu
Chris
Anzeige
AW: Platzhalter in String verwenden
17.05.2018 21:20:05
Martin
Hi Chris,
besten Dank für deine Hilfe. Mit regular expressions hatte ich tatsächlich schon mal gearbeitet. Allerdings hatte ich gehofft, dass man auch wie bei der SUCHEN-Funktion gewohnt einfach ein "?" als Platzhalter einsetzen könnte.
Aber so wie du geschrieben hast, geht es auf jeden Fall. Ich habe daraufhin noch folgenden Link gefunden, der genau mein Problem löst:
https://www.herber.de/forum/archiv/896to900/898349_suchen_mit_Regexp.html#898369
Danke noch mal.
Grüße
Martin
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Platzhalter in Strings mit Excel und VBA verwenden


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Füge den Code ein: Kopiere den folgenden VBA-Code in das Modul:

    Function SUCHEN_INV(Search_Text As String, Search_Range As Excel.Range) As Integer
       Dim Search_Length As Integer
       Search_Length = Len(Search_Text)
       Dim i As Integer
       Dim Found As Boolean
    
       For i = Search_Range.Count To 1 Step -1
           If Len(Search_Range.Cells(i).Value) >= Search_Length Then
               If Search_Range.Cells(i).Value Like Replace(Search_Text, "?", "*") Then
                   SUCHEN_INV = i
                   Exit Function
               End If
           End If
       Next i
       SUCHEN_INV = -1 ' Wenn nichts gefunden
    End Function
  4. Verwende die Funktion in Excel: Du kannst die Funktion jetzt in Excel so verwenden:

    =SUCHEN_INV("?.?.?", A1:A10)

    Hierbei wird "A1:A10" als Bereich angegeben, in dem nach dem Platzhalter gesucht wird.


Häufige Fehler und Lösungen

  • Fehler: Funktion gibt -1 zurück: Dies bedeutet, dass kein passendes Datum gefunden wurde. Stelle sicher, dass der Suchbereich korrekt ist und dass die Platzhalter in der Form "?.?.?" eingegeben sind.
  • Fehler: Typkonflikt: Achte darauf, dass der Suchbereich nur Textwerte enthält. Wenn der Bereich Zahlen oder leere Zellen enthält, kann dies zu Fehlern führen.

Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du auch die SUCHEN-Funktion in Excel nutzen, allerdings mit dem Nachteil, dass diese nur von links nach rechts sucht. Für komplexe Suchen mit Platzhaltern wie "?" und "*" sind reguläre Ausdrücke (RegEx) eine hervorragende Alternative. Du kannst RegEx über VBA verwenden, um flexiblere Suchmöglichkeiten zu bieten.


Praktische Beispiele

  • Beispiel 1: Angenommen, du hast in Zelle A1 den Text "Datum 1 16.05.2018" und in A2 "Datum 2 17.05.2018". Wenn du nach dem letzten Datum suchst, kannst du die Funktion =SUCHEN_INV("?.?.?", A1:A2) verwenden, um den Index zu erhalten.
  • Beispiel 2: Wenn du den Platzhalter für Text verwenden möchtest, um nach einem spezifischen Format zu suchen, kannst du die Like-Anweisung in VBA nutzen, um die Übereinstimmung zu testen.

Tipps für Profis

  • Nutze die Like-Anweisung in VBA, um komplexe Muster zu definieren. Mit Platzhalterzeichen wie * und ? kannst du die Suche anpassen.
  • Experimentiere mit RegEx in VBA für noch präzisere Suchfunktionen. Besonders nützlich, wenn du mit Daten arbeitest, die unregelmäßige Formate enthalten.
  • Halte deine VBA-Funktionen so allgemein wie möglich, damit sie in verschiedenen Projekten wiederverwendet werden können.

FAQ: Häufige Fragen

1. Kann ich auch andere Platzhalterzeichen verwenden?
Ja, du kannst * für beliebige Zeichenfolgen und ? für ein einzelnes Zeichen verwenden. Achte darauf, die Platzhalter in der VBA-Funktion korrekt zu behandeln.

2. Funktioniert diese Methode in allen Excel-Versionen?
Die VBA-Funktion sollte in den meisten modernen Excel-Versionen funktionieren, aber teste sie in deiner spezifischen Umgebung, um sicherzugehen.

3. Wo kann ich mehr über RegEx lernen?
Es gibt zahlreiche Online-Ressourcen. Eine gute Anlaufstelle ist regex101.com, wo du deine Muster testen kannst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige