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

VBA - Datum prüfen und formatieren

Forumthread: VBA - Datum prüfen und formatieren

VBA - Datum prüfen und formatieren
02.10.2021 23:48:07
Peter_S
Zur Konvertierung unterschiedlicher Datumsformate prüfe ich eine Eingabezelle mit IsDate und gebe dann den Inhalt mit dem Format "DD.MM.YYYY" aus.
Wenn nun die Eingabezelle ein Datum ohne Tagesangabe enthält, dann ist dies ja ebenfalls eine gültige Datumsangabe. Wie kann ich prüfen, ob die Ausgangszelle eine Tagesangabe hat oder nicht? Wie erreiche ich das "Oktober 2021" oder "2021/10" als "10.2021" ausgegeben wird und nicht als 1.10.2021?
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Datum prüfen und formatieren
02.10.2021 23:59:56
Oberschlumpf
na, zähl doch die Slashes in der Angabe.
bei...
"Oktober 2021" = zählen von / = 0, dann
mit Split() nach Leerzeichen trennen; ergibt Split()(0) = "Oktober"
jetzt überprüfen, ob Split()(0) ein Monatsname ist
wenn Nein, dann Code-Abbruch
wenn Ja, dann erstmal Monatsname in Zahl umwandeln, dann Format = "MM.YYYY"; ergibt aus Split()(0) + Split()(1) = "10.2021"
bei...
"2021/10" = ähnlich vorgehen, nur eben darauf achten, dass nur 1x / vorkommen darf, und dass jetzt Monat hinten und Jahr vorn steht.
Hach ja, mal nicht den Code selbst erstellen müssen macht auch mal Spaß :-) bei VBA = Gut bekommst du das ja hin.
Hilfts?
Anzeige
AW: VBA - Datum prüfen und formatieren
03.10.2021 00:18:35
Peter_S

Hilfts?
Hallo Oberschlumpf.
Nicht wirklich. Dennoch vielen Dank für die schnelle Reaktion.
Die Angaben "Oktober 2021" oder "2021/10" waren nur beispielhaft. Ich möchte alle Angaben, welche IsDate als gültig kennzeichnet, prüfen und in einem einheitlichen Format ausgeben. Mit einheitlich meine ich entweder "DD.MM.YYYY" oder "MM.YYYY" oder "YYYY", in Abhängigkeit der Eingabewerte.
Gibt es also eine Möglichkeit zu prüfen, ob die Eingabezelle Tag/Monat/Jahr, Monat/Jahr oder nur Jahr beinhaltet?
Anzeige
AW: VBA - Datum prüfen und formatieren
03.10.2021 01:18:04
Oberschlumpf
Hi,
da gibts bestimmt ne Möglichkeit!
Aber..ähh...wie stellst du dir das vor - ohne, dass du vllt bitte mal ne Bsp-Datei mit ausreichend Bsp-Daten per Upload zeigst?
Denn was unterschiedliche Datumsanzeigen betrifft, gibt es ja auch so Einige.
Ich mag jetzt zuerst aber nich überlegen müssen, WAS es da so alles gibt - bevor - ich mit dem eigtl Testen für dich beginnen kann.
Ciao
Thorsten
Anzeige
AW: VBA - Datum prüfen und formatieren
04.10.2021 00:26:58
Peter_S
Hallo Thorsten,
ich zähle jetzt die möglichen Trennzeichen und entscheide das Format in Abhängigkeit der Anzahl.
If IsDate(vDate) = True Then
iCnt1 = Len(vDate) - Len(Replace(vDate, " ", ""))
iCnt2 = Len(vDate) - Len(Replace(vDate, ".", ""))
iCnt3 = Len(vDate) - Len(Replace(vDate, "/", ""))
iCnt4 = Len(vDate) - Len(Replace(vDate, "-", ""))
If iCnt1 = 2 Or iCnt2 = 2 Or iCnt3 = 2 Or iCnt4 = 2 Then
sDATE = Format(vDate, "DD.MM.YYYY")
ElseIf iCnt1 = 1 Or iCnt2 = 1 Or iCnt3 = 1 Or iCnt4 = 1 Then
sDATE = Format(vDate, "MM.YYYY")
End If
Else
sDATE = vDate
End If
Danke für Deine Tipps.
Peter
Anzeige
AW: VBA - Datum prüfen und formatieren
04.10.2021 02:10:34
Oberschlumpf
Hi Peter,
zwar nur indirekt, aber ich bat dich um eine Bsp-Datei per Upload.
Warum du diese nicht liefern kannst oder willst, weiß ich nicht.
Ich bin raus - wer anders bitte - weiter viel Erfolg.
Ciao
Thorsten
AW: VBA - Datum prüfen und formatieren
06.10.2021 07:27:56
MCO
Moin Peter!
Wenn du schon so weit bist, dass Excel die Eingabe als Datum erkennt, dann kannst du doch einfach das erkannte Format auslesen:

activecell.numberformat
für Oktober 2021 wird umgewandelt in Okt 21, format ist dann "mmm-yy"
Gruß, MCO
Anzeige
AW: VBA - Datum prüfen und formatieren
06.10.2021 14:45:13
Peter_S
Hi MCO,
danke für den Tipp, habe ich probiert.
Die Abfrage auf das numberformat funktioniert nicht in allen Fällen. Wenn die Ausgangszelle einen Text enthält, zum Beispiel "'Oktober 2021" (mit vorangestelltem Hochkomma), dann ist numberformat = "General", die IsDate-Prüfung aber trotzdem positiv.
Viele Grüße
Peter
Anzeige
AW: VBA - Datum prüfen und formatieren
06.10.2021 18:07:37
Oberschlumpf
Hi Peter,
und vor der IsDAte-Prüfung kannst du nicht prüfen, ob das erste Zeichen = ' ist?! (Hochkomma, wie du es nennst)
Wenn 1. Zeichen = ' (Anführ.zeichen nich vergessen!), dann könntest du auf IsDate prüfen...usw
Hilfts?
Ciao
Thorsten
AW: VBA - Datum prüfen und formatieren
06.10.2021 18:41:10
GerdL
Moin,
es geht undurchsichtiger.

ReDim cnt(0 To 3) As Integer
cnt(0) = 0
If IsDate(vdate) Then
cnt(0) = Len(vdate) - Len(Replace(vdate, " ", ""))
cnt(1) = Len(vdate) - Len(Replace(vdate, ".", ""))
cnt(2) = Len(vdate) - Len(Replace(vdate, "/", ""))
cnt(3) = Len(vdate) - Len(Replace(vdate, "-", ""))
End If
sDate = Array(vdate, Format(vdate, "MM.YYYY"), Format(vdate, "DD.MM.YYYY"))(Application.Max(cnt))
Erase cnt
Gruß Gerd
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA zur Prüfung und Formatierung von Daten


Schritt-für-Schritt-Anleitung

  1. Zelleninhalt prüfen: Beginne mit der Überprüfung des Inhalts der Eingabezelle. Verwende die Funktion IsDate in VBA, um zu prüfen, ob der Inhalt ein gültiges Datum ist.

    If IsDate(vDate) Then
       ' Weiterverarbeiten
    End If
  2. Trennzeichen zählen: Zähle die verschiedenen Trennzeichen (z.B. Leerzeichen, Punkte, Schrägstriche, Bindestriche) im Datum, um die Struktur zu bestimmen.

    iCnt1 = Len(vDate) - Len(Replace(vDate, " ", ""))
    iCnt2 = Len(vDate) - Len(Replace(vDate, ".", ""))
    iCnt3 = Len(vDate) - Len(Replace(vDate, "/", ""))
    iCnt4 = Len(vDate) - Len(Replace(vDate, "-", ""))
  3. Format bestimmen: Entscheide das Format des Datums basierend auf der Anzahl der Trennzeichen:

    If iCnt1 = 2 Or iCnt2 = 2 Or iCnt3 = 2 Or iCnt4 = 2 Then
       sDATE = Format(vDate, "DD.MM.YYYY")
    ElseIf iCnt1 = 1 Or iCnt2 = 1 Or iCnt3 = 1 Or iCnt4 = 1 Then
       sDATE = Format(vDate, "MM.YYYY")
    End If
  4. Datumsformat auslesen: Wenn das Datum bereits in Excel erkannt wurde, kannst du auch das aktuelle Format des Datums mit ActiveCell.NumberFormat abfragen.

    Dim format As String
    format = ActiveCell.NumberFormat
  5. Endausgabe: Gebe das formatierte Datum aus oder speichere es in einer gewünschten Zelle.


Häufige Fehler und Lösungen

  • Fehler: IsDate erkennt Text als Datum
    Lösung: Prüfe vor der IsDate-Abfrage, ob das erste Zeichen ein Hochkomma (') ist, da dies anzeigt, dass der Text nicht als Datum formatiert ist.

  • Fehler: Ungültige Datumsformate
    Lösung: Stelle sicher, dass du die Trennzeichen richtig zählst und nur gültige Formate akzeptierst.

  • Fehler: ActiveCell.NumberFormat funktioniert nicht
    Lösung: Überprüfe, ob das Datum korrekt in Excel formatiert ist, bevor du versuchst, das Format auszulesen.


Alternative Methoden

  • Verwendung von Split(): Eine alternative Methode zur Trennung von Datumsangaben ist die Verwendung der Split-Funktion, um Teile des Datums zu isolieren und diese dann zu analysieren.

    Dim parts() As String
    parts = Split(vDate, " ")
  • Zählen der Slashes: Eine weitere Möglichkeit ist, die Anzahl der Schrägstriche (/) zu zählen, um zu bestimmen, ob es sich um ein Datum im Format MM/YYYY handelt.


Praktische Beispiele

  1. Beispiel für die Umwandlung von "Oktober 2021":

    Dim vDate As String
    vDate = "Oktober 2021"
    If IsDate(vDate) Then
       sDATE = Format(vDate, "MM.YYYY") ' Ausgabe: 10.2021
    End If
  2. Beispiel für das Formatieren von "2021/10":

    vDate = "2021/10"
    If IsDate(vDate) Then
       sDATE = Format(vDate, "MM.YYYY") ' Ausgabe: 10.2021
    End If

Tipps für Profis

  • Nutze die Application.WorksheetFunction-Methoden, um die Datumsprüfung und -formatierung effizienter zu gestalten.
  • Experimentiere mit verschiedenen Datumsformaten in Excel, um die Funktionsweise besser zu verstehen.
  • Halte deine VBA-Module sauber und gut kommentiert, um die Wartung zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich ein Datum im Format "DD/MM/YYYY" in VBA prüfen?
Verwende die IsDate-Funktion zusammen mit einer Formatierung, die sicherstellt, dass das Datum in diesem speziellen Format vorliegt.

2. Was ist der Unterschied zwischen IsDate und der Verwendung von ActiveCell.NumberFormat?
IsDate prüft, ob der Inhalt ein gültiges Datum ist, während ActiveCell.NumberFormat das Format des bereits erkannten Datums in Excel zurückgibt.

3. Wie gehe ich mit ungültigen Datumsangaben um?
Stelle sicher, dass du die Eingaben vor der Umwandlung prüfst und benutze eine Fehlerbehandlung, um ungültige Formate abzufangen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige