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

Forumthread: mit VBA Datumszellen als Text formatieren

mit VBA Datumszellen als Text formatieren
15.05.2006 11:55:30
Peter
Guten Tag
Ich habe eine Tabelle, in welche ich regelmässig Daten importiere. Aus dem Import habe ich in Spalte U ab Zeile 5 bis 90 oder weiter jeweils das Datum in Form einer seriellen Zahl.
Damit meine weiteren Makros laufen, muss ich diese serielle Zahl in das Datum umwandeln, es muss sich jedoch um ein Text- und nicht ein Datumsformat handeln. Wie kann ich diese Formatierung vornehmen?
Beispiel: aus 38849 soll "12.05.2006" werden, jedoch wie gesagt nicht als Datumsformat sondern als Text.
Danke für Feedback.
Peter
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit VBA Datumszellen als Text formatieren
15.05.2006 12:17:56
wernerB.
Hallo Peter,
markiere den betreffenden Zellbereich und starte dann dieses Makro:

Sub Peter()
Dim c As Range, _
Dt As String
For Each c In Selection
With c
.NumberFormat = "m/d/yyyy"
Dt = .Text
.ClearContents
.NumberFormat = "@"
.Value = Dt
End With
Next c
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Anzeige
AW: mit VBA Datumszellen als Text formatieren
15.05.2006 14:21:09
Peter
Hallo Werner
Vielen Dank für den Feedback.
Ich habe versucht, den Code etwas umzuschreiben, da ich nicht manuell einen Bereich markieren will, sondern einfach die erste Zelle in der Spalte anwähle und dann die Aktion ausführe, bis die Zelle leer ist.
Mein Problem ist nun, dass bei
.NumberFormat = "t/d/yyyy" (vgl. nachstehend Endstation ist.
Laufzeitfehler '1004': Die NumberFormat-Eigenschaft des Range Objektes
kann nicht festgelegt werden.
Kann mir jemand weiterhelfen?
Besten Dank, Peter

Sub textdat()
Dim zNr As Long, Dt As String
zNr = 5
Do While Cells(zNr, 21) <> ""  'Spalte U
With (Cells(zNr, 21))
.NumberFormat = "t/d/yyyy"
Dt = .Text
.ClearContents
.NumberFormat = "@"
.Value = Dt
End With
zNr = zNr + 1
Loop
End Sub

Anzeige
AW: mit VBA Datumszellen als Text formatieren
15.05.2006 15:10:24
Peter
Hallo miteinander
Ich habe nun mit Hilfe eines anderen Herber-Treads folgende Lösung gefunden:

Sub textdat()
Dim zNr As Long
zNr = 5
Do While Cells(zNr, 21) <> ""
If Cells(zNr, 21) <> 0 Then
Cells(zNr, 21) = Format((Cells(zNr, 21)), "DD.MM.YYYY")
Else
End If
zNr = zNr + 1
Loop
End Sub

Weshalb ein Textformat daraus geworden ist, ist mir nicht klar, vielleicht kann mir ja dies jemand erklären.
Danke, Peter
Anzeige
AW: mit VBA Datumszellen als Text formatieren
15.05.2006 15:23:23
WernerB.
Hallo Peter,
vielleicht versuchst Du es mal so (bitte ohne jegliche Veränderung!):

Sub textdat()
Dim c As Range, _
Dt As String, _
zNr As Long, laR As Long
zNr = 5
laR = Cells(Rows.Count, 21).End(xlUp).Row
If laR < zNr Then Exit Sub
Application.ScreenUpdating = False
For Each c In Range("U" & zNr & ":U" & laR)
With c
.NumberFormat = "m/d/yyyy"
Dt = .Text
.ClearContents
.NumberFormat = "@"
.Value = Dt
End With
Next c
Application.ScreenUpdating = True
End Sub

Gruß
WernerB.
Anzeige
AW: mit VBA Datumszellen als Text formatieren
15.05.2006 17:33:52
Peter
Hallo Werner
Vielen Dank.
Nun funktioniert es tadellos!
Peter
AW: mit VBA Datumszellen als Text formatieren
15.05.2006 12:20:19
Tino
Hallo,
meinst du vieleicht so?

Sub Datum()
'Zelle A1 = Datumformat
Dim Datum As String
Datum = Range("A1").Text
End Sub

Gruss
tino
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Datumszellen in Excel mit VBA als Text formatieren


Schritt-für-Schritt-Anleitung

Um Datumszellen in Excel mithilfe von VBA als Text zu formatieren, kannst du den folgenden Code verwenden. Dieser Code konvertiert die serielle Zahl in ein Textformat, welches für deine weiteren Makros genutzt werden kann.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub textdat()
    Dim c As Range, _
    Dt As String, _
    zNr As Long, laR As Long
    zNr = 5
    laR = Cells(Rows.Count, 21).End(xlUp).Row  ' Spalte U
    If laR < zNr Then Exit Sub
    Application.ScreenUpdating = False
    For Each c In Range("U" & zNr & ":U" & laR)
        With c
            .NumberFormat = "m/d/yyyy"
            Dt = .Text
            .ClearContents
            .NumberFormat = "@"
            .Value = Dt
        End With
    Next c
    Application.ScreenUpdating = True
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus, indem du ALT + F8 drückst und textdat auswählst.

Häufige Fehler und Lösungen

  • Laufzeitfehler '1004': Dieser Fehler tritt auf, wenn das NumberFormat nicht gesetzt werden kann. Achte darauf, dass du die richtige Formatierung verwendest. Verwende "m/d/yyyy" für die Datumsformatierung und "@" für Text.

  • Falsches Format: Wenn das Datum nicht korrekt als Text angezeigt wird, stelle sicher, dass du .ClearContents vor der Zuweisung des Textes verwendest, um die Zelle zu bereinigen.


Alternative Methoden

Eine andere Möglichkeit, Datumszellen als Text zu formatieren, ist die Verwendung der Format-Funktion in VBA:

Sub alternativeMethod()
    Dim zNr As Long
    zNr = 5
    Do While Cells(zNr, 21) <> ""  ' Spalte U
        If Cells(zNr, 21) <> 0 Then
            Cells(zNr, 21) = Format((Cells(zNr, 21)), "DD.MM.YYYY")
        End If
        zNr = zNr + 1
    Loop
End Sub

Diese Methode formatiert die Zelle direkt und sollte ebenfalls als Text in der gewünschten Form angezeigt werden.


Praktische Beispiele

Hier ist ein Beispiel für die Anwendung des Codes. Wenn du beispielsweise die serielle Zahl 38849 in der Zelle U5 hast, wird sie nach der Ausführung des Makros als "12.05.2006" angezeigt, aber als Text gespeichert.

Ein weiteres Beispiel könnte sein, wenn du eine ganze Spalte in einem Import-Datenbereich hast, der regelmäßig aktualisiert wird. Der VBA-Code kann so angepasst werden, dass er die Spalte automatisch aktualisiert.


Tipps für Profis

  • Nutze Application.ScreenUpdating = False am Anfang des Makros, um die Ausführung zu beschleunigen und das Flackern des Bildschirms zu vermeiden.
  • Du kannst den Code erweitern, um mehrere Spalten gleichzeitig zu formatieren, indem du weitere For Each-Schleifen hinzufügst.
  • Achte darauf, die richtigen Zellreferenzen und Formate für deine spezifischen Anforderungen zu verwenden.

FAQ: Häufige Fragen

1. Kann ich das Makro für mehrere Spalten gleichzeitig verwenden?
Ja, du kannst den Code so anpassen, dass er in einer Schleife mehrere Spalten abarbeitet.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen.

3. Was passiert, wenn ich die serielle Zahl nicht in ein Datum umwandeln kann?
Wenn das Datum nicht umgewandelt werden kann, bleibst du mit der ursprünglichen seriellen Zahl. Stelle sicher, dass die Zelle gültige Daten enthält.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige