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

Forumthread: Datum-Format Abfrage in VBA

Datum-Format Abfrage in VBA
20.06.2007 16:24:00
Damir
Hallo Leute,
Folgendes Problem habe ich:
In der Arbeitsmappe kann ich mit folgendem Befehl überprüfen ob der Inhalt ein Datum ist
bzw. ob das Datum-Format in der Zelle aktiv ist:
IF ( CELL("format";B1)="D1";"Datum";"Kein Datum")
Wie kann man das mit einem Makro/VBA überprüfen ?
Folgender Abschnitt funktioniert leider nicht (als Beispiel):
For Each c In ActiveSheet.Range("A1:A1000").Cells
If c.NumberFormat = "Date" Then c.Value = Format(c.Value, "YYYYMMDD")
Next
Dagegen der Abschnitt unten funktioniert korrekt (ob die Zelle die Formatierung "General" hat:
For Each c In ActiveSheet.Range("A1:A1000").Cells
If ((c.Value "") And (c.NumberFormat = "General")) Then c.Value = c.Value & "0000"
Next
Hat jemand hier eine Idee ?
Danke und Gruss
Damir

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Datum-Format Abfrage in VBA
20.06.2007 16:35:00
ingUR
Hallo, Damir,
vielleicht funkioniert dieses, wenn in der Zelle ein gültiges Datum steht:
If isdate(c) Then c.Value = Format(c.Value, "YYYYMMDD")
Allederdings habe ich nicht geprüft, was passiert, wenn die Zelle bereits ein Datumsformat hat.
Gruß,
Uwe

AW: Datum-Format Abfrage in VBA
20.06.2007 17:41:00
Damir
Hallo Uwe,
Danke ! Nun funktioniert Abfrage isdate(c)
Die Zelle hat entweder Datumsormat (12.11.2000) oder "General"-Format (z.B. 1965 -> ein Jahr). Wenn das Format "General" ist dann bekomme ich mit
If ((c.Value <> "") And (c.NumberFormat = "General")) Then c.Value = c.Value & "0000"
korrektes Ergebnis. Wenn in der Zelle Datumsformat ist dann gibt es ein Overflow.
Gruss Damir

Anzeige
AW: Datum-Format Abfrage in VBA
20.06.2007 18:52:00
ingUR
Hallo, Damir,
bedenke bei den Operationen immer, dass eine Datum intern eine Double-Datentyp ist, als eine Gleitkommazahl, bei der die Ganzzahl die anzahl der Tage ab einem Stichtag angeben und die nachkommastellen als Bruchzahl des Tages die Uhrzeit angibt.
Damit wird wohl auch klar, dass Du einem Wert einer Zelle (c.Value) vom Datentyp Double resp. Date ohne Typenumwandlung keinen Teilstring (hier & "0000") anfügen kannst. Wenn nun 1995 als Text eingesetzt wird, dann funktioniert das Anfügen des Teilstrings, jedoch ein Umformen dieses Textes "1995"in eine Datumswert dürfte nicht ohne weiteres funktionieren.
Schau Dir im Debug-Moduseinmal die unterschidlichen Bestandteile der Zellle c an (via Überwachung oder bequemer im Ansichtfenster Lokal-Fenster)
Es ist also von Bedeutung, welchen Datentyp Du erzeugen willst, denn ein angezeigter Wert/String "19950000" ist kein Datumswert, der einen Tag im Jahr 1995 bezeichnet, sondern eine Zahl(!), die allerdings auch nicht in ein, für das Sytem direkt darstellbares Datum mit vier Jahresziffern, gewandelt werden kann (die Zahl 1995000 zeigt das Datum 13.02.7362).
Der erste Tag im Jahr 1995, 0:00:00,0 wird durch die Zahl 34700.000 ausgedrückt.
Nun mußt Du entscheiden, ob ein Datumswert oder eine Zeichenkette generiert werden soll.
Gruß,
Uwe

Anzeige
AW: Datum-Format Abfrage in VBA
20.06.2007 16:36:31
Hubert
For Each c In ActiveSheet.Range("A1:A1000").Cells
If IsDate(c) Then c.Value = Format(c.Value, "YYYYMMDD")
Next
mfg Hubert
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Datum-Format Abfrage in VBA


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA das Datum-Format abzufragen und zu formatieren, kannst du folgende Schritte befolgen:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke auf Einfügen > Modul.

  3. Kopiere und füge den folgenden Code in das Modul ein:

    Sub FormatDateInRange()
        Dim c As Range
        For Each c In ActiveSheet.Range("A1:A1000").Cells
            If IsDate(c.Value) Then
                c.Value = Format(c.Value, "YYYYMMDD")
            End If
        Next c
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.

Dieser Code überprüft jede Zelle im Bereich A1:A1000. Wenn der Inhalt ein Datum ist, wird es im Format YYYYMMDD ausgegeben.


Häufige Fehler und Lösungen

  • Overflow-Fehler: Wenn du einen Overflow-Fehler erhältst, könnte es daran liegen, dass du versuchst, einen Wert, der kein Datum ist, in ein Datumsformat zu konvertieren. Stelle sicher, dass die Zellen im Bereich tatsächlich gültige Datumswerte enthalten.
  • Falsches Datentyp: Beachte, dass ein Datum in VBA als Double-Datentyp behandelt wird. Wenn du versuchst, eine Zeichenkette an einen Datumswert anzufügen, kann dies zu Fehlern führen. Verwende CStr(c.Value) oder Format(c.Value, "YYYYMMDD") für die Umwandlung.

Alternative Methoden

Es gibt verschiedene Möglichkeiten, um mit Datum-Formaten in VBA zu arbeiten. Eine häufige Methode ist die Verwendung von NumberFormat:

c.NumberFormat = "DD.MM.YYYY"

Diese Zeile setzt das Datumsformat in der Zelle auf den deutschen Standard. Eine andere Möglichkeit ist die Verwendung von Format direkt beim Zuweisen von Werten.


Praktische Beispiele

Hier sind zwei Beispiele, wie du das Datum formatieren kannst:

  1. Formatierung in einer einzigen Zelle:

    Sub FormatSingleCell()
        If IsDate(ActiveSheet.Range("B1").Value) Then
            ActiveSheet.Range("B1").Value = Format(ActiveSheet.Range("B1").Value, "YYYYMMDD")
        End If
    End Sub
  2. Formatierung mehrerer Zellen mit unterschiedlichen Formaten:

    Sub FormatMultipleCells()
        Dim c As Range
        For Each c In ActiveSheet.Range("C1:C10").Cells
            If IsDate(c.Value) Then
                c.Value = Format(c.Value, "DD-MM-YYYY")
            End If
        Next c
    End Sub

Diese Beispiele zeigen, wie du mit verschiedenen Datumsformaten in VBA umgehen kannst.


Tipps für Profis

  • Nutze die Debug.Print Funktion, um Werte während der Ausführung des Makros zu überprüfen. Dies kann bei der Fehlersuche hilfreich sein.
  • Experimentiere mit verschiedenen NumberFormat- und Format-Optionen, um das gewünschte Datumsformat zu erreichen.
  • Denke daran, dass eine Änderung des Formats nicht den zugrunde liegenden Wert ändert. Verwende CDate() oder Format() für sicherere Konvertierungen.

FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob eine Zelle ein Datum ist?
Verwende die Funktion IsDate(c), um zu prüfen, ob der Inhalt einer Zelle ein Datum ist.

2. Was ist der Unterschied zwischen Format und NumberFormat?
Format gibt das Datum als String im gewünschten Format zurück, während NumberFormat das tatsächliche Format der Zelle ändert, ohne den Wert zu verändern.

3. Kann ich das Datum auch in Excel 2010 formatieren?
Ja, dieser VBA-Code funktioniert auch in Excel 2010 und neueren Versionen. Achte darauf, dass die Datumswerte korrekt eingegeben sind.

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