AW: Zellen bereinigen
14.12.2023 12:09:44
UweD
Hallo
es scheint, als ob der Code mal von mir stammt. :-)
Ich nehme den hinteren Teil, wenn mehrere Daten angegeben sind, da dort meist die Jahreszahl enthalten ist.
Fehlt der Tag, setze ich den 01. ein (macht Excel manchmal auch automatisch)
Bei Ende.. nehme ich 31.12.
Sub Einlesen()
Dim Pfad As String, Ext As String, Datei As String
Dim TB As Worksheet, Sp As Integer, LR As Long
Set TB = ActiveSheet
Sp = 1 'Daten in Spalte A beginnend
Ext = "*.xlsm"
Pfad = "C:\Lola\Desktop\Datensätze\"
'Pfad = "D:\Excel\temp\Test\"
With TB
.Columns(Sp).Resize(, 2).NumberFormat = "mmmm yyyy"
Datei = Dir(Pfad & Ext)
Do While Len(Datei) > 0
LR = .Cells(.Rows.Count, Sp).End(xlUp).Row + 1 'erste freie Zeile Spalte
'Hier werden die Datumsangaben eingefügt..........................................................
With .Cells(LR, Sp)
.FormulaR1C1 = "='" & Pfad & "[" & Datei & "]Bemerkungen'!R7C3"
If .Value > "" Then .Value = Datum_normieren(.Value)
End With
With .Cells(LR, Sp + 1)
.FormulaR1C1 = "='" & Pfad & "[" & Datei & "]Bemerkungen'!R7C4"
If .Value > "" Then .Value = Datum_normieren(.Value)
End With
.Cells(LR, Sp + 18) = Datei
Datei = Dir() 'nächste Datei
Loop
End With
End Sub
Private Function Datum_normieren(TMP As String)
Dim TT As String
TT = TMP
Select Case True
Case IsDate(TMP)
'mache nix
Case InStr(TMP, "-")
TMP = Trim(Mid(TMP, InStr(TMP, "-") + 1))
Case InStr(TMP, "bis Ende")
TMP = "31.12." & Trim(Replace(TMP, "bis Ende", ""))
Case InStr(TMP, "Plan")
TMP = "01." & Trim(Replace(TMP, "Plan", ""))
Case InStr(TMP, "+")
TMP = Trim(Mid(TMP, InStr(TMP, "+") + 1))
Case InStr(TMP, "/")
TMP = Trim(Mid(TMP, InStr(TMP, "/") + 1))
End Select
If Not IsNumeric(Right(TMP, 4)) Then
'Jahreszahl 2stellig
TMP = "01." & TMP
End If
If Not IsDate(TMP) Then
If Len(TMP) - Len(Replace(TMP, "/", "")) > 2 Then 'nur ein /
TMP = "01." & TMP
End If
If Len(TMP) - Len(Replace(TMP, ".", "")) > 2 Then 'nur ein .
TMP = "01." & TMP
End If
If Not IsNumeric(Left(TMP, 1)) Then 'keine Zahl vorne
TMP = "01." & TMP
End If
End If
On Error GoTo Fehler
Datum_normieren = CDate(TMP)
Exit Function
Fehler:
Datum_normieren = TT & ": ist kein Datum"
End Function
LG UweD