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

Forumthread: Position von beliebigem Datum aus String suchen

Position von beliebigem Datum aus String suchen
03.11.2016 20:25:02
beliebigem
Hallo Excelfreunde,
ich möchte gern aus einer Zelle mit Text und einem beliebigen Datum die Stelle des Datums im Text finden - z. B aus "Heute ist der 03.11.2016, ein Donnerstag." Meine Idee war, das Ganze über die InStr-Funktion zu machen. Das Datumsformat soll wie folgt erkannt werden: dd.mm.yyyy
Als Platzhalter wollte ich die "?" verwenden. Das scheint aber nicht zu funktionieren. Ich bekomme leider nur 0 als Wert für i ausgegeben (s. Bsp.-Makro unten). Könnt ihr mir sagen, was ich ändern muss bzw. welcher Platzhalter für Instr funktioniert?
Ich verwende Excel 2016
Viele Grüße
Martin
Hier das Bsp.-Makro
Sub Test()
Dim i As Integer
i = InStr(1, Range("A1").Value, "?.?.?")
MsgBox i
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Position von beliebigem Datum aus String suchen
03.11.2016 20:33:16
beliebigem
Hallo,
das geht mit "RegEx" (regular expression) recht gut (pattern: "\d{2}\.\d{2}\.\d{4}", ersatzweise auch mit
like "[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]"
Falls du mit der Hilfefunktion nicht zurecht kommen solltest, melde dich noch einmal.
mfg
AW: Position von beliebigem Datum aus String suchen
04.11.2016 23:34:29
beliebigem
Hallo Fennek,
vielen Dank für deine schnelle Antwort. Mit dem Tipp bin ich fündig geworden und haber erstmal den unten stehenden Code zusammen gebastelt. Jetzt klappt es wunderbar, die Position vom Datum zu finden :)
Solltest du noch Anmerkungen dazu haben, kannst du sie mir gern noch mitteilen :)
Viele Grüße
Martin
Code sieht jetzt so aus:
Sub Test()
Dim objRegEx As Object, objMatch As Object
Dim strText As String
Dim intIndex As Integer
Dim i As Integer
strText = "Heute ist der 03.11.2016, ein Donnerstag."
Set objRegEx = CreateObject("vbscript.regexp")
With objRegEx
.Global = True
.IgnoreCase = True
.MultiLine = False
.Pattern = "\d{2}\.\d{2}\.\d{4}"
'"\d+"
Set objMatch = .Execute(strText)
End With
For intIndex = 0 To objMatch.Count - 1
Debug.Print objMatch(intIndex)
i = InStr(1, strText, objMatch(intIndex))
MsgBox i
Next
Set objRegEx = Nothing
Set objMatch = Nothing
End Sub

Anzeige
AW: Position von beliebigem Datum aus String suchen
03.11.2016 20:35:53
beliebigem
Hallo Martin,
mein Vorschlag sieht etwas anders aus:
Sub Vorschlag()
Dim strValue As String, i As Integer
strValue = Replace(Range("A1").Value, " ", "")
For i = 1 To Len(strValue)
If IsDate(Mid(strValue, i, 10)) Then
MsgBox Mid(strValue, i, 10)
Exit For
End If
Next
End Sub
Viele Grüße
Martin
Anzeige
AW: Position von beliebigem Datum aus String suchen
04.11.2016 23:40:42
beliebigem
Hi Martin,
das ist auch nochmal ein guter Ansatz, den ich sicherlich in einem anderen Makro verwenden werde. Für den aktuellen Fall war es aber nicht ganz das, was ich gesucht habe. Die Mid-Funktion würde mir ja das gesamte Datum wiedergeben und ich benötige aber die Position im Text. Trotzdem noch vielen Dank für die Anregung :)
Viele Grüße
Martin
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Position von beliebigem Datum aus String suchen


Schritt-für-Schritt-Anleitung

Um die Position eines Datums in einem String zu finden, kannst du die InStr-Funktion in Kombination mit regulären Ausdrücken (RegEx) verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und gehe zu dem Arbeitsblatt, in dem du arbeitest.
  2. Drücke Alt + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeinWorkbookName)" > Einfügen > Modul.
  4. Kopiere den folgenden Code in das Modul:
Sub FindDatePosition()
    Dim objRegEx As Object, objMatch As Object
    Dim strText As String
    Dim i As Integer

    strText = Range("A1").Value ' Hier wird der Text in Zelle A1 verwendet
    Set objRegEx = CreateObject("vbscript.regexp")

    With objRegEx
        .Global = True
        .IgnoreCase = True
        .MultiLine = False
        .Pattern = "\d{2}\.\d{2}\.\d{4}" ' RegEx für das Datumsformat dd.mm.yyyy
    End With

    Set objMatch = objRegEx.Execute(strText)

    For i = 0 To objMatch.Count - 1
        MsgBox "Das Datum " & objMatch(i) & " wurde an Position " & InStr(1, strText, objMatch(i)) & " gefunden."
    Next

    Set objRegEx = Nothing
    Set objMatch = Nothing
End Sub
  1. Füge einen Text mit Datum in Zelle A1 ein, z.B. "Heute ist der 03.11.2016, ein Donnerstag."
  2. Führe das Makro aus: Gehe zurück zu Excel, drücke Alt + F8, wähle FindDatePosition und klicke auf "Ausführen".

Häufige Fehler und Lösungen

  • Fehler: Kein Ergebnis wird angezeigt.

    • Lösung: Stelle sicher, dass der Text in Zelle A1 das richtige Datumsformat hat (dd.mm.yyyy). Überprüfe auch, ob das RegEx korrekt definiert ist.
  • Fehler: Der Platzhalter funktioniert nicht.

    • Lösung: In der InStr-Funktion kannst du keine Platzhalter wie "?" verwenden. Stattdessen solltest du RegEx verwenden, um das Datum zu erkennen.

Alternative Methoden

Eine alternative Methode zur Erkennung von Daten könnte die Verwendung der IsDate-Funktion in einer Schleife sein. Hier ein Beispiel:

Sub AlternativeFindDate()
    Dim strValue As String
    Dim i As Integer

    strValue = Replace(Range("A1").Value, " ", "")

    For i = 1 To Len(strValue)
        If IsDate(Mid(strValue, i, 10)) Then
            MsgBox "Datum gefunden: " & Mid(strValue, i, 10) & " an Position " & i
            Exit For
        End If
    Next
End Sub

Diese Methode durchforstet den String und prüft mit IsDate, ob ein Datum vorhanden ist.


Praktische Beispiele

  • Beispiel 1: In Zelle A1 steht: "Der nächste Termin ist der 15.12.2022." Das Makro findet "15.12.2022" und gibt die Position im Text aus.

  • Beispiel 2: In Zelle A1 steht: "Das Event findet am 01.01.2023 statt." Das Makro findet "01.01.2023" und zeigt die Position an.


Tipps für Profis

  • RegEx optimieren: Passe das RegEx-Muster an, um verschiedene Datumsformate (z.B. "dd-mm-yyyy" oder "yyyy-mm-dd") zu unterstützen.
  • Fehlermeldungen verwenden: Implementiere Fehlerbehandlungsroutinen, um den Benutzer über mögliche Probleme zu informieren.
  • VBA-Dokumentation: Nutze die VBA-Hilfe, um mehr über die InStr- und RegEx-Funktionen zu lernen.

FAQ: Häufige Fragen

1. Wie kann ich das Datum aus einem Text in eine andere Zelle extrahieren?
Du kannst das gefundene Datum in eine andere Zelle schreiben, indem du Range("B1").Value = objMatch(i) anstelle der Meldung verwendest.

2. Welche Excel-Version benötige ich für die Verwendung von RegEx in VBA?
Die Verwendung von RegEx in VBA ist in Excel 2016 und späteren Versionen verfügbar. Stelle sicher, dass du die Microsoft VBScript Regular Expressions 5.5 Bibliothek in den Verweisen aktiviert hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige