Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Datum in VBA erkennen

Datum in VBA erkennen
17.03.2016 17:34:15
Phantom
Hallo liebe Helfer,
ich habe einen String im Format "Month Day, Year", diesen lese ich aus einer Textdatei ein.
Wenn ich diesen Wert, beispielsweise "Mar 14, 2016" in eine Zelle schreibe, erkennt Excel automatisch, dass es ein Datum ist. Wenn ich die Zelle dann im Format dd.mm.yyyy" formatiere, wird das Datum wie gewünscht (14.03.2016) angezeigt.
Den gleichen Effekt möchte ich nun direkt in VBA bewirken, da ich dort einen Abgleich mit einem Datumsstring im Format dd.mm.yyyy machen möchte.
Dim sDate1 as String
Din sDate2 as String
sDate1 = "Mar 14, 2016"
sDate2 = "13.03.2016"
if sDate1 sDate2 Then
do something
end if
Beide Daten werden über eine Textdatei eingelesen und sind deswegen Strings. Eventuell gibt eine Konvertierung zu Date vor dem Vergleich Sinn.
Vielen Dank und herzliche Grüße
Phantom

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Datum in VBA erkennen
17.03.2016 17:41:12
Daniel
Hi
mit der Funktion CDate() kannst du einen Text, der wie ein Datum aussieht in ein Datum wandeln:
If CDate(sDate1)  CDate(sDate2) Then
mit IsDate() kannst du prüfen, ob der Textstring überhaupt in ein Datum wandelbar ist (die Prüfung kann ggf erforderlich sein, da CDate() einen Fehlerabbruch erzeugt, wenn der Text nicht in ein Datum wandelbar ist)
Gruß Daniel

Anzeige
AW: Datum in VBA erkennen
17.03.2016 18:41:25
Phantom
Hallo Daniel,
vielen herzlichen Dank für deine Antwort. Leider kann CDate den String "May 14, 2016" nicht in ein Datum wandeln (Typen unverträglich).
Folgendes funktioniert, aber wie gesagt, ich benötige ähnliches in VBA. Gibt es eine einfache Methode oder muss ich den String zerteilen?

Dim sDate1 as String
sDate1 = "Mar 14, 2016"
Worksheets(1).Cells(1, 1).Value = sDate1
Worksheets(1).Columns(1).NumberFormat = "dd.mm.yyyy"

Anzeige
AW: Datum in VBA erkennen
17.03.2016 18:56:12
Daniel
Hi
die Umwandlungsfunktionen CDate oder auch DateValue benötigten die landestypischen Schreibweisen, dh in Deutschland für den 5. Monat "Mai" oder für den 8. Monat "Oktober".
wenn die Texte im englischen Format vorliegen ("May", "October") wüsste ich jetzt für VBA keine Umwandlungsfunktion, die dieses verwendet, ausser der von dir schon gezeigten Methode, den Wert in die Zelle zu schreiben, und die automatische Umwandlungsfunktion von Excel zu nutzen, denn diese wendet das englische Schema an, wenn die Werte von VBA kommen.
die alternativen Lösungen wären, die Monatsbezeichungen per Replace durch deutsche Monatsbezeichnungen zu ersetzen, oder eben den String zu zerlegen und dann das ganze ausprogrammieren.
Gruß Daniel

Anzeige
AW: Datum in VBA erkennen
20.03.2016 11:31:35
Sanjoy
Vielen Dank!
;
Anzeige
Anzeige

Infobox / Tutorial

Datum in VBA erkennen und verarbeiten


Schritt-für-Schritt-Anleitung

  1. String einlesen: Lies den Datumsstring aus einer Textdatei ein. Zum Beispiel:

    Dim sDate1 As String
    sDate1 = "Mar 14, 2016"
  2. Überprüfung des Datentyps: Überprüfe, ob der String in ein Datum umgewandelt werden kann, bevor du die Umwandlung vornimmst.

    If IsDate(sDate1) Then
       ' Der String ist ein gültiges Datum
    End If
  3. Umwandlung in Datum: Verwende die CDate-Funktion, um den String in ein Datum zu konvertieren.

    Dim dDate1 As Date
    dDate1 = CDate(sDate1)
  4. Vergleich mit einem anderen Datum: Vergleiche das konvertierte Datum mit einem anderen, ebenfalls als String eingelesenen Datum.

    Dim sDate2 As String
    sDate2 = "13.03.2016"
    If dDate1 <> CDate(sDate2) Then
       ' Führe eine Aktion aus, wenn die Daten unterschiedlich sind
    End If

Häufige Fehler und Lösungen

  • Typen unverträglich: Wenn CDate einen Fehler ausgibt, könnte das an einem ungültigen Datumsformat liegen. Stelle sicher, dass der String im richtigen Format vorliegt. In Deutschland sollte der Monat in Deutsch angegeben sein.

  • Unbekanntes Datum: Wenn der String nicht in ein Datum umgewandelt werden kann (z.B. englische Monatsnamen), verwende eine alternative Methode, um den String zu zerlegen oder die Monatsnamen zu ersetzen.


Alternative Methoden

  • Zerlegen des Strings: Zerlege den Datumsstring manuell, um die verschiedenen Teile (Monat, Tag, Jahr) zu extrahieren und dann ein Datum zu erstellen:

    Dim parts() As String
    parts = Split(sDate1, " ")
    ' parts(0) = Monat, parts(1) = Tag, parts(2) = Jahr
    Dim dDate As Date
    dDate = DateSerial(parts(2), MonthNameToNumber(parts(0)), parts(1))
  • Monatsnamen umwandeln: Erstelle eine Funktion, die englische Monatsnamen in deutsche umwandelt, bevor du CDate verwendest.


Praktische Beispiele

Hier ist ein Beispiel, wie du die Umwandlung und den Vergleich in einer Funktion zusammenfassen kannst:

Function CompareDates(sDate1 As String, sDate2 As String) As Boolean
    If IsDate(sDate1) And IsDate(sDate2) Then
        Return CDate(sDate1) = CDate(sDate2)
    Else
        ' Fehlerbehandlung
        CompareDates = False
    End If
End Function

Tipps für Profis

  • Verwende IsDate: Prüfe immer, ob ein String in ein Datum umgewandelt werden kann, bevor du CDate verwendest, um Laufzeitfehler zu vermeiden.

  • Regionale Einstellungen beachten: Achte auf die regionalen Datumsformate in Excel. Dies kann entscheidend sein, wenn du mit verschiedenen Datumsformaten arbeitest.


FAQ: Häufige Fragen

1. Warum funktioniert CDate nicht mit englischen Monatsnamen? CDate benötigt die landestypischen Schreibweisen. Für deutsche Einstellungen müssen englische Monatsnamen vorher in deutsche umgewandelt werden.

2. Wie kann ich sicherstellen, dass mein Datum korrekt formatiert ist? Nutze die Excel-Funktion NumberFormat, um das Datum in das gewünschte Format zu bringen, nachdem du es in die Zelle geschrieben hast.

3. Was ist der Unterschied zwischen CDate und DateValue? Beide Funktionen wandeln Strings in Datumswerte um, jedoch kann CDate auch Zeitwerte berücksichtigen, während DateValue nur das Datum zurückgibt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige