Wie kann ich mit VBA ein Datum auslesen, welches nicht als Datum formatiert ist?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wenn du Glück hast, ist das als Text (?) gespeicherte Datum in einem Format, dass VB als Datum erkennen kann. Dann reicht ein einfaches "CDate". 

Ansonsten müsstest du die Zeichenkette parsen. Das bedeutet, dass du festlegen musst: Die ersten Zeichen bis zum Punkt sind Tage, dann kommen zwei Stellen für den Monat und die letzten 4 Ziffern bilden das Jahr.

Dann kannst du dir das Datum zusammenbauen.

shikser 
Fragesteller
 23.06.2016, 12:05

Alles klar, dann probiere ich das erstmal über cdate aus, alternativ dann über das (für mich noch unbekannte) parsen ;)

Vielen Dank, ich melde mich wieder

0
Suboptimierer  23.06.2016, 12:10
@shikser

Es gab vor ein paar Tagen ein ähnliches Problem. Ich kram es mal hervor...

0
shikser 
Fragesteller
 23.06.2016, 13:01
@Suboptimierer

Das Datum ist leider nicht als solches formatiert, also mache ich das jetzt so: 

Option Explicit


Sub date()
Dim pos1, pos2
Dim Wort As String
Dim intTag As String, intMonat As String, intJahr As String
Wort = Worksheets("Bausteinkatalog").Range("E48").Value
pos1 = InStr(Wort, ".") 'Position erster Punkt
pos2 = InStr(pos1 + 1, Wort, ".") 'Position zweiter Punkt
strTag = Mid(Wort, pos1 - 2, 2)
strMonat = Mid(Wort, pos1 + 1, 2)
strJahr = Mid(Wort, pos2 + 1, 5)
MsgBox "Tag: " & strTag & " Monat: " & strMonat & " Jahr: " & strJahr
End Sub


Und dann das ganze noch schön in ne Schleife verpacken um alle Zeilen der Spalte auszulesen ;)

1

Am einfachsten geht das per Regular Expression (Regulärem Ausdruck).

Dazu bindest du in der VBA-Entwicklungsumgebung unter "Verweise" den Baustein "Microsoft VBScript Regular Expressions 5.5" ein (der ist bei mir jedenfalls nicht alphabetisch einsortiert, sondern irgendwo viel weiter oben).

Dann kannst du (in deinem Beispiel) mit dem Pattern

(\d{2}\.\d{2}\.\d{4})

nach tt.mm.jjjj suchen.

In ein Datum (ggf. mit Uhrzeit) umwandeln kannst du das mit

WorksheetFunction.DateValue(Datumsstring)

bzw.

WorksheetFunction.DateValue(Datumsstring) + WorksheetFunction.TimeValue(Datumsstring)

Ich habe 3 Hilfsspalten benötigt, das Ding kann aber jetzt mehr wie du denkst: (Dein O-Text in A2)

1. Leerzeichen innerhalb des Datums entfernen in B2
   =WECHSELN(A2;". ";".")

2. Suche nach ".20" (falls im 20. Jahrhundert, wenn nicht, bitte um Info) in C2
   =SUCHEN(".20";B2)

3. Suche nach dem Punkt vor ".20" in D2
   =SUCHEN(".";B2;C2-4)

4. Ergebnis als Datum
   =WENN(ISTZAHL(A2);A2;WENNFEHLER(DATWERT(TEIL(B2;D2-2;C2-D2+7));"kein Datum gefunden"))

Woher ich das weiß:eigene Erfahrung – Faulheit >> Neugier >> Wissen
 - (Suche, Microsoft Excel, VBA)