Re: Das Datum ist nicht Excel konform
Hallo Walter,
wenn das Datum immer aus 6 Ziffern besteht, dann funktioniert die folgende Konversion. Dazu Cursor in Tabellenspalte mit dem Datum positionieren, dann Makro starten.
Dass Makro kannst du in einem Modul deiner Normal.dot speichern.
Gruß
Franz
'Erstellt unter Word 2007
Sub DatumKonversion_Var01()
Dim objZelle As Cell, objTabelle As Table
Dim Zeile As Long, Spalte As Long
Dim strText As String, strDatum As String
Dim Jahr As Long, Monat As Long, Tag As Long
'Prüfen ob Cursor in Tabelle positioniert ist
If Selection.Information(wdWithInTable) Then
'Tabelle an Cursorposition der Objektvariablen zuweisen
Set objTabelle = Selection.Tables(1)
'Spalten-Nummer der aktuellen Cursorposition ermitteln
Spalte = Selection.Columns(1).Index
For Zeile = 1 To objTabelle.Rows.Count
Set objZelle = objTabelle.Cell(Zeile, Spalte)
'Text in Zelle
strText = objZelle.Range.Text
'Zeichen für Zellenende abtrennen
strText = Mid(strText, 1, Len(strText) - 2)
'Prüfen, ob Text eine Zahl ist
If IsNumeric(strText) And Len(strText) = 6 Then
'Jahr ermitteln - Bedingung bei welchen Jahreszahlen mit 2000 bzw. 1900 _
gerechent werden soll ggf. anpassen
'Falls sowohl Jahreszahlen von 1900 bis 1909 als auch 2000 bis 2009 _
vorkommen könne, dann muss ggf. manuell die Jahreszahl korrigiert werden.
Jahr = CLng(Mid(strText, 5, 2))
If Jahr <= Year(Date) - 2000 Then
Jahr = 2000 + Jahr
Else
Jahr = 1900 + Jahr
End If
'Monat ermitteln
Monat = CLng(Mid(strText, 3, 2))
'Tag ermitteln
Tag = CLng(Mid(strText, 1, 2))
'Datum in neuem Format ermitteln
strDatum = Format(DateSerial(Jahr, Monat, Tag), "DD.MM.YYYY")
'Umgewandeltes Datum in Zelle einfügen
objZelle.Range.Text = strDatum
End If
Next
Else
MsgBox "Bitte Cursor in Tabellen-Spalte mit zu konvertierendem Datum positionieren."
End If
End Sub
Du kannst die Konversion natürlich auch nach dem Einfügen in Excel durchführen. Das entsprechende Makro in Excel sieht wie folgt aus.
Sub DatumKonversion()
'wandelt selektierter Spalte Zahlen, deren 5 bzw. 6 Ziffern ein Datum repräsentieren _
in ein Exceldatum um.
'Zahlen: 10299 = 01.02.1999 _
110233 = 11.02.1933 _
221108 = 22.11.2008
Dim objRange As Range, objZelle As Range
Dim strDatum As String
Dim Jahr As Long, Monat As Long, Tag As Long
'Zellen mit Daten in Spalte mit selektierter Zelle als Bereich festlegen
Set objRange = Range(Cells(1, ActiveCell.Column), _
Cells(Rows.Count, ActiveCell.Column).End(xlUp))
For Each objZelle In objRange
If IsNumeric(objZelle) And (Len(objZelle) = 5 Or Len(objZelle) = 6) Then
strDatum = Format(objZelle.Value, "000000")
'Jahr ermitteln - Bedingung bei welchen Jahreszahlen mit 2000 bzw. 1900 _
gerechent werden soll ggf. anpassen
'Falls sowohl Jahreszahlen von 1900 bis 1909 als auch 2000 bis 2009 _
vorkommen könne, dann muss ggf. manuell die Jahreszahl korrigiert werden.
Jahr = CLng(Mid(strDatum, 5, 2))
If Jahr <= Year(Date) - 2000 Then
Jahr = 2000 + Jahr
Else
Jahr = 1900 + Jahr
End If
'Monat ermitteln
Monat = CLng(Mid(strDatum, 3, 2))
'Tag ermitteln
Tag = CLng(Mid(strDatum, 1, 2))
'Umgewandeltes Datum in Zelle einfügen
objZelle.Value = DateSerial(Jahr, Monat, Tag)
End If
Next
End Sub