Anzeige
Archiv - Navigation
1940to1944
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datum, als Text manuell vs VBA

Datum, als Text manuell vs VBA
16.08.2023 14:42:50
Michael Schludi
Hallo,

ich bin verzweifelt, ich habe eine Datei, in der bei der Datumsspalte der Tag und der Monat vertauscht ist. Um das Ganze zu beheben, wollte ich die Datumsspalte als Text formatieren.
Das klappt, wenn ich folgendes mache:
- Spalte markieren
- Data -> Text To Columns -> Fixed Width -> Text -> Finish

Wenn ich aber VBA verwende und das als Makro laufen lasse, bekomme ich bei den Spalten, an denen der Tag 13 ist
vorher:
LogDate
06/12/2023

nachher:
LogDate
12/6/2023

Was mache ich falsch?
Die Datei ist hier: https://www.herber.de/bbs/user/162356.xlsx
Der Code vom Macro ist folgender:
Sub AARTDateAsText()
'
' AARTDateAsText Macro
'

'
' find LogDate column
Range("A1").Select
Cells.Find(What:="LogDate", After:=ActiveCell, _
LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
LogDateCol = ActiveCell.EntireColumn.Column
LogDateColLetter = Split(Cells(1, LogDateCol).Address, "$")(1)


Columns(LogDateColLetter & ":" & LogDateColLetter).Select
Selection.TextToColumns Destination:=Range(LogDateColLetter & "1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 2), TrailingMinusNumbers:=True

End Sub


Danke für Eure Hilfe

Michael

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum, als Text manuell vs VBA
16.08.2023 14:57:39
daniel
Hi
das funktioniert nicht so einfach, weil du zwei Fälle hast.
dort, wo der Tag kleiner als 13 ist und somit ein Datum sein kann, hat Excel dir ein Datum erstellt mit Tag und Monat getauscht.
dort, wo der Tag größer als 12 ist, ergibt sich durch den Tausch kein Sinnvolles Datum und der Wert bleibt Text.

wenn du für die Umwandlung das TEXT IN SPALTEN anwenden wolltest, müsstest du dafür sorgen, dass alle importierten Werte Text bleiben und nicht in ein Datum umgewandelt werden.
wenn das nicht möglich ist, dann kannst du die Umwandlung mit dieser Formel durchführen:

=WERT(WENN(ISTZAHL(B2);TEXT(B2;"JJJJ-TT-MM");RECHTS(B2;4)&"/"&LINKS(B2;LÄNGE(B2)-5)))


Gruß Daniel
Anzeige
AW: Datum, als Text manuell vs VBA
16.08.2023 15:13:18
Rudi Maintaire
Hallo,
altbekanntes Problem. VBA ist nun mal (amerikanisches) englisch.
Schreibe statt des Datums den entsprechenden Long-Wert in die Zellen (heute ist 45154) und formatiere als Datum.

Sub AARTDateAsText()

'
' AARTDateAsText Macro
'
' find LogDate column
Dim LogDateCol
Dim vntArr, i As Long, vntTmp

LogDateCol = Cells.Find(what:="LogDate", LookIn:=xlValues, lookat:=xlWhole).Column

vntArr = Range(Cells(2, LogDateCol), Cells(Rows.Count, LogDateCol).End(xlUp))

For i = 1 To UBound(vntArr)
vntTmp = Split(vntArr(i, 1), "/")
vntArr(i, 1) = CLng(DateSerial(--vntTmp(2), --vntTmp(0), --vntTmp(1)))
Next i

With Cells(2, LogDateCol).Resize(UBound(vntArr))
.Value = vntArr
.NumberFormat = "DD.MM.YYYY"
End With

End Sub

Gruß
Rudi
Anzeige
Datum, als Text manuell vs VBA
16.08.2023 16:41:33
Michael Schludi
das hat mein Problem behoben, danke!!!
AW: Datum, als Text manuell vs VBA
16.08.2023 15:18:03
Alwin Weisangler
Hallo Michael,

wenn nur die Datumswerte im Format "6/13/2023" als Datum via VBA ausgegeben/umgewandelt werden sollen, kann man das mit Split "/" zerlegen und mit DateSerial zum Datum zusammensetzen.


Sub inDatum()
With Sheet1
For i = 2 To .Cells(Rows.Count, 2).End(xlUp).Row
If InStr(1, .Cells(i, 2), "/") > 0 Then
arr = Split(.Cells(i, 2), "/")
.Cells(i, 2) = DateSerial(arr(2), arr(0), arr(1)) ' Ausgabe in Zelle als Datum
End If
Next i
End With
End Sub

Gruß Uwe
Anzeige
AW: Datum, als Text manuell vs VBA
16.08.2023 15:34:45
UweD
Hallo
noch eine Möglichkeit

Alle Zellen, die TEXT enthalten werden abgearbeitet.

    Dim Zelle

Dim Zelle
For Each Zelle In Columns(2).SpecialCells(xlCellTypeConstants, 2)
If InStr(Zelle, "/") Then Zelle.Value = CDate(DateValue(Zelle))
Next

LG UweD

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige