Datum umformatieren

Hallo zusammen,

habe schon wieder ein Problem.
Ich habe ein Sheet mit mehreren tausend Datensätzen,
die im Ausschnitt so aussehen:

 A B
1 10.02.2006 Februar
2 02.10.2006 Februar
3 12.02.2006 Februar
4 15.02.2006 Februar
5 02.26.2006 Februar
 ... März
 ...

In A2 und A5 sind Monat und Tag vertauscht. Wie kann ich ihm sagen,
daß er Monat und Tag tauschen soll, wenn im Februar (z.B.) der
02.10.2006 steht statt 10.02.2006?

Ich hoffe, ich habe es halbwegs verständlich ausgedrückt.

Gruß und danke schonmal.

Rolf

A B
1 10.02.2006 Februar
2 02.10.2006 Februar
3 12.02.2006 Februar
4 15.02.2006 Februar
5 02.26.2006 Februar
… März

In A2 und A5 sind Monat und Tag vertauscht. Wie kann ich ihm
sagen,
daß er Monat und Tag tauschen soll, wenn im Februar (z.B.) der
02.10.2006 steht statt 10.02.2006?

Hi Rolf,
„falsche“ Daten wie in A5 sind mit
=wenn(istfehler(monat(A5);…
o.ä. korrigierbar.
Aber wie soll Excel wissen dass 02.10.2006 „falsch“ ist?
Gruß
Reinhard

A B
1 10.02.2006 Februar
2 02.10.2006 Februar
3 12.02.2006 Februar
4 15.02.2006 Februar
5 02.26.2006 Februar
… März

In A2 und A5 sind Monat und Tag vertauscht. Wie kann ich ihm
sagen,
daß er Monat und Tag tauschen soll, wenn im Februar (z.B.) der
02.10.2006 steht statt 10.02.2006?

Hi Rolf,
„falsche“ Daten wie in A5 sind mit
=wenn(istfehler(monat(A5);…
o.ä. korrigierbar.
Aber wie soll Excel wissen dass 02.10.2006 „falsch“ ist?

Hallo Reinhard,

danke für die schnelle Reaktion,
ich dachte an eine Lösung wie (einfach mal in die Tüte):

Wenn B1 = „Februar“ UND Monat in A1 ist NICHT 02, dann tausche
Tag und Monat, sonst „laß es wie es ist“ :smile:

Für März, April… müßte ich die Formel dann umschreiben (aber wo
schreibe ich sie rein?).

Geht sowas, oder hab ich jetzt Blödsinn „in der Tüte“?

Gruß

Rolf

Hallo Rolf
Es ist ja elegant, wenn man so etwas mit einer Formel lösen kann. In diesem Fall scheint mir dies aber unpraktisch bis fast unmöglich, da du ja in dieslebe Zelle schreiben willst, wo der „falsche“ Wert steht. Du müsstest zu diesem Zweck neue Spalten benutzen etc…
Ich schlage dir vor, die ganze Liste mit einem Makro abzuklappern; das hat den Vorteil, dass keine Hilfsspalten angelegt werden müssen und dass dann in der Spalte A die richtigen Datumangaben stehen.
Ein Makro prüft dann von Zelle zu Zelle, ob

  1. in A ein gültiges Datum steht (nicht etwas wie 25.25.2025). Falls nicht, Meldung …
  2. der Monat im gültigen Datum dem Text in B entspricht. Wenn nicht, wird Monat mit Tag vertauscht und das Resultat eingetragen.
    Falls du es möchtest, kann ich dir so ein Makro stricken.
    Erich

Wenn B1 = „Februar“ UND Monat in A1 ist NICHT 02, dann tausche
Tag und Monat, sonst „laß es wie es ist“ :smile:

Für März, April… müßte ich die Formel dann umschreiben (aber
wo
schreibe ich sie rein?).

Hi Rolf,
schreibe in z.B. C1 rein:
=pruef(A1)
und kopiere das nach unten.
Dann die C-Spalte nach A kopieren mit Bearbeiten—InhalteEnfügen—Werte
Oder wie schon gesagt ein Makro was die A-Spalte „abklappert“

Option Explicit
Function pruef(Zelle As Range)
Application.Volatile
Dim dat
On Error GoTo wechsel
dat = Split(Zelle, „.“)
If MonthName(dat(1)) Range(„B“ & Zelle.Row) Then GoTo wechsel
pruef = DateValue(dat(2) & „.“ & dat(1) & „.“ & dat(0))
Exit Function
wechsel:
pruef = DateValue(dat(2) & „.“ & dat(0) & „.“ & dat(1))
End Function

Gruß
Reinhard

Wenn B1 = „Februar“ UND Monat in A1 ist NICHT 02, dann tausche
Tag und Monat, sonst „laß es wie es ist“ :smile:

Für März, April… müßte ich die Formel dann umschreiben (aber
wo
schreibe ich sie rein?).

Hi Rolf,
schreibe in z.B. C1 rein:
=pruef(A1)
und kopiere das nach unten.
Dann die C-Spalte nach A kopieren mit
Bearbeiten—InhalteEnfügen—Werte
Oder wie schon gesagt ein Makro was die A-Spalte „abklappert“

Option Explicit
Function pruef(Zelle As Range)
Application.Volatile
Dim dat
On Error GoTo wechsel
dat = Split(Zelle, „.“)
If MonthName(dat(1)) Range(„B“ & Zelle.Row) Then GoTo
wechsel
pruef = DateValue(dat(2) & „.“ & dat(1) & „.“ & dat(0))
Exit Function
wechsel:
pruef = DateValue(dat(2) & „.“ & dat(0) & „.“ & dat(1))
End Function

Hallo Reinhard,

vielen Dank für Deine Mühe. Aber ich steh grad wieder
auf der Leitung:

Wenn ich in C1 =pruef(A1) schreibe, bekomme ich als
Ergebnis #NAME?

Zum Makro:

ALT+F11

Doppelklick auf „Diese Arbeitsmappe“, Makro aus
Zwischenablage einfügen. Schließen, Zurück zum
Excel-Blatt, ALT+F8 - da steht aber nix…

Wohin muß ich denn dieses Makro schreiben,
damit ich es starten kann?

Gruß

Rolf

Hi Erich,

danke für das Angebot, Du beschreibst genau das, was ich
„in die Tüte“ gesprochen hatte. Reinhard hat schon was
gestrickt. Vielleicht komm ich damit weiter,
dann müßt Ihr Euch nicht beide Arbeit machen.
Vielleicht komm ich drauf zurück.

Gruß

Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rolf
Hier mein nicht sehr eleganter, aber funktionierender Versuch:

Option Explicit
Sub testen()
Dim Monat, Text, Wert, TestNr
Range("A1").Select
While ActiveCell.Value \> ""
Los:
 Wert = ActiveCell.Value
 
 'Mit der Formel "Monat = Month(ActiveCell.Value)"
 'geht es nicht, weil diese Funktion auch
 'die amerikanischen Formate automatisch erkennt!
 'deshalb Monat selber "herausschälen":
 Monat = Mid(Wert, 4, 2)
 
 ' mit Trim mögliche Leerschläge in Spalte B entfernen
 Text = Trim(ActiveCell.Offset(0, 1).Value)
 
 If (Monat = 1 And Text = "Januar") Then GoTo weiter
 If (Monat = 2 And Text = "Februar") Then GoTo weiter
 If (Monat = 3 And Text = "März") Then GoTo weiter
 If (Monat = 4 And Text = "April") Then GoTo weiter
 If (Monat = 5 And Text = "Mai") Then GoTo weiter
 If (Monat = 6 And Text = "Juni") Then GoTo weiter
 If (Monat = 7 And Text = "Juli") Then GoTo weiter
 If (Monat = 8 And Text = "August") Then GoTo weiter
 If (Monat = 9 And Text = "September") Then GoTo weiter
 If (Monat = 10 And Text = "Oktober") Then GoTo weiter
 If (Monat = 10 And Text = "November") Then GoTo weiter
 If (Monat = 12 And Text = "Dezember") Then GoTo weiter
 'keiner hat gepasst. Tag/Monat tauschen:
 ActiveCell.Value = Mid(Wert, 4, 2) & "." & Mid(Wert, 1, 2) & "." & Mid(Wert, 7, 4)
 'neuenEintrag prüfen
 TestNr = TestNr + 1
 
 'Geduld ist zu Ende !!
 If TestNr = 2 Then
 ActiveCell.Offset(0, 2).Value = "Da steht kein Datum!"
 GoTo weiter
 End If
 GoTo Los
weiter:
 ActiveCell.Offset(1, 0).Activate
Wend
End Sub

Lass das einaml laufen !
Gruss
Erich

Hallo Erich,

jetzt warst Du wohl ein paar Sekunden schneller als ich :smile:
vielen Dank, ich probiere es aus.

Gruß

Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ALT+F11
Doppelklick auf „Diese Arbeitsmappe“, Makro aus
Zwischenablage einfügen. Schließen, Zurück zum
Excel-Blatt, ALT+F8 - da steht aber nix…
Wohin muß ich denn dieses Makro schreiben,
damit ich es starten kann?

Hallo Rolf,
Einfügen–Modul, da gehört normaler Makrocode rein.
In DieseArbeitsmappe sollte nur Specialcode für Ereignismakros rein. (Das öffnen , schliessen einer Mappe usw. ist ein Ereignis der Arbeitsmappe).
Tabellenbblätter haben auch Ereignisse wie Change, Selectionchange usw.
Gruß
Reinhard

Hallo Erich,

das ist ja genial, herzlichen Dank für Deine Mühe.

Frage:
Ich hatte in A6 den 06.02.06 stehen und er hat’s artig
nach 06.02.06 geändert.
Warum schreibt er mir denn in C6 „Da steht kein Datum“?
Ich habe die Zeile im Makro zwar gefunden, ich kanns aber
nicht interpretieren.

Gruß

Rolf

Hallo Rolf
Hier mein nicht sehr eleganter, aber funktionierender Versuch:

Option Explicit
Sub testen()
Dim Monat, Text, Wert, TestNr
Range(„A1“).Select
While ActiveCell.Value > „“
Los:
Wert = ActiveCell.Value

'Mit der Formel „Monat = Month(ActiveCell.Value)“
'geht es nicht, weil diese Funktion auch
'die amerikanischen Formate automatisch erkennt!
'deshalb Monat selber „herausschälen“:
Monat = Mid(Wert, 4, 2)

’ mit Trim mögliche Leerschläge in Spalte B entfernen
Text = Trim(ActiveCell.Offset(0, 1).Value)

If (Monat = 1 And Text = „Januar“) Then GoTo weiter
If (Monat = 2 And Text = „Februar“) Then GoTo weiter
If (Monat = 3 And Text = „März“) Then GoTo weiter
If (Monat = 4 And Text = „April“) Then GoTo weiter
If (Monat = 5 And Text = „Mai“) Then GoTo weiter
If (Monat = 6 And Text = „Juni“) Then GoTo weiter
If (Monat = 7 And Text = „Juli“) Then GoTo weiter
If (Monat = 8 And Text = „August“) Then GoTo weiter
If (Monat = 9 And Text = „September“) Then GoTo weiter
If (Monat = 10 And Text = „Oktober“) Then GoTo weiter
If (Monat = 10 And Text = „November“) Then GoTo weiter
If (Monat = 12 And Text = „Dezember“) Then GoTo weiter
'keiner hat gepasst. Tag/Monat tauschen:
ActiveCell.Value = Mid(Wert, 4, 2) & „.“ & Mid(Wert, 1, 2) &
„.“ & Mid(Wert, 7, 4)
'neuenEintrag prüfen
TestNr = TestNr + 1

'Geduld ist zu Ende !!
If TestNr = 2 Then
ActiveCell.Offset(0, 2).Value = „Da steht kein Datum!“
GoTo weiter
End If
GoTo Los
weiter:
ActiveCell.Offset(1, 0).Activate
Wend
End Sub

Lass das einaml laufen !
Gruss
Erich

ALT+F11
Doppelklick auf „Diese Arbeitsmappe“, Makro aus
Zwischenablage einfügen. Schließen, Zurück zum
Excel-Blatt, ALT+F8 - da steht aber nix…
Wohin muß ich denn dieses Makro schreiben,
damit ich es starten kann?

Einfügen–Modul, da gehört normaler Makrocode rein.
In DieseArbeitsmappe sollte nur Specialcode für Ereignismakros
rein. (Das öffnen , schliessen einer Mappe usw. ist ein
Ereignis der Arbeitsmappe).
Tabellenbblätter haben auch Ereignisse wie Change,
Selectionchange usw.

Hallo Reinhard,

danke für die Info, da habe ich wohl schon etliche Makros
an den falschen Ort geschoben…

Gruß

Rolf

danke für die Info, da habe ich wohl schon etliche Makros
an den falschen Ort geschoben…

Hallo Rolf,
Makros laufen grundsätzlich egal wo sie stehen, aber es ist besser sie gleich richtig zu positionieren.

Sorry , habe das vorhin zu flüchtig gelesen. Ich hatte dir eine Funktion geschrieben, kein Makro, deshalb konntest du es nach ctrl+F8 nicht sehen. Funktionen und Makros mit Parametern werden nicht gelistet.
Das ist jetzt ein Makro:

Option Explicit
Sub Korrektur()
Dim dat, n As Long, merker As String
For n = 1 To ActiveSheet.Range("A65536").End(xlUp).Row
 dat = Split(Cells(n, 1), ".")
 If CInt(dat(1)) \> 12 Then
 merker = dat(0)
 dat(0) = dat(1)
 dat(1) = merker
 End If
 If CInt(dat(1)) \> 12 Then
 MsgBox "Das gibts ja nich in Zelle A" & n
 Exit Sub
 End If
 If MonthName(dat(1)) Range("B" & n) Then dat(1) = "02"
 Cells(n, 1) = DateValue(dat(2) & "." & dat(1) & "." & dat(0))
Next n
End Sub

Gruß
Reinhard

Option Explicit
Sub Korrektur()
Dim dat, n As Long, merker As String
For n = 1 To ActiveSheet.Range(„A65536“).End(xlUp).Row
dat = Split(Cells(n, 1), „.“)
If CInt(dat(1)) > 12 Then
merker = dat(0)
dat(0) = dat(1)
dat(1) = merker
End If
If CInt(dat(1)) > 12 Then
MsgBox „Das gibts ja nich in Zelle A“ & n
Exit Sub
End If
If MonthName(dat(1)) Range(„B“ & n) Then dat(1) =
„02“
Cells(n, 1) = DateValue(dat(2) & „.“ & dat(1) & „.“ &
dat(0))
Next n
End Sub

Hallo Reinhard,

Da bekomme ich eine Fehlermeldung: Fehler beim Kompillieren,
Sub oder Function nicht definiert.

dat = Split(Cells(n, 1), „.“) „split“ hat er markiert.

Gruß

Rolf

Da bekomme ich eine Fehlermeldung: Fehler beim Kompillieren,
Sub oder Function nicht definiert.
dat = Split(Cells(n, 1), „.“) „split“ hat er markiert.

Hallo Rolf,
dann hast du Xl97, da gabs „Split“ noch nicht.
Ich muss/will jetzt weg.
probiers so mal:

pos1=instr(cells(n,1),".")
pos2=instr(pos1+1,cells(n,1),".")
dat1=mid(cells(n,1),1,pos1-1)
dat2=mid(cells(n,1),pos1+1,pos2-1)
dat3=mid(cells(n,1),pos2+1)

und ersetze im Code dat(0) durch dat1, dat(1) durh dat2 usw.
Gruß
Reinhard

Hallo Rolf

das ist ja genial, herzlichen Dank für Deine Mühe.

Danke für die Blumen

Warum schreibt er mir denn in C6 „Da steht kein Datum“?
Ich habe die Zeile im Makro zwar gefunden, ich kanns aber
nicht interpretieren.

Wenn in einer Zelle ein „verkehrtes“ Datum steht, kehrt er es umd. Dann kann es aber immer noch falsch sein (z.B. 15.15.2006). Deshalb dr Prüfdurchgang. Wenn es dann immer noch kein Datum ist, ist es eben keins!
ABER: Ich habe vergessen, die Variable wieder auf Null zu stellen!!!
Füge ein:

...
Los:
 TestNr = 0
 Wert = ActiveCell.Value
...

Jetzt sollte es laufen.
(Wenn du die Meldung nicht in Spalte C schreiben willst, musst du einfach den Wert 3 im offset vergrössern.)
Gruss
Erich

Hallo Rolf
Sorry, meine letzte Meldung war nicht korrekt!

  1. Die Variable muss am richtigen Ort zurückgestellt werden
  2. November ist nicht 10, sondern 11
  3. Der Text „kein Datum“ ist ungenau: „kein erlaubtes Datum“ ist besser, da nicht nur 15.15.2006, sondern auch z.B. 08.12.2006 nicht erlaubt, wegen Spalte B=Februar.
  4. Offset 2 ergibt Spalte C (A+2), Wenn du in F schreiben willst, wäre offset = 5

der Einfachheit halber hier mein ganzer korrigierter Code:

Option Explicit
Sub testen()
Dim Monat, Text, Wert, TestNr
Range("A1").Select
While ActiveCell.Value \> ""
TestNr = 0
Los:
 Wert = ActiveCell.Value
 
 'Mit der Formel "Monat = Month(ActiveCell.Value)"
 'geht es nicht, weil diese Funktion auch
 'die amerikanischen Formate automatisch erkennt!
 'deshalb Monat selber "herausschälen":
 Monat = Mid(Wert, 4, 2)

 ' mit Trim mögliche Leerschläge in Spalte B entfernen
 Text = Trim(ActiveCell.Offset(0, 1).Value)
 
 If (Monat = 1 And Text = "Januar") Then GoTo weiter
 If (Monat = 2 And Text = "Februar") Then GoTo weiter
 If (Monat = 3 And Text = "März") Then GoTo weiter
 If (Monat = 4 And Text = "April") Then GoTo weiter
 If (Monat = 5 And Text = "Mai") Then GoTo weiter
 If (Monat = 6 And Text = "Juni") Then GoTo weiter
 If (Monat = 7 And Text = "Juli") Then GoTo weiter
 If (Monat = 8 And Text = "August") Then GoTo weiter
 If (Monat = 9 And Text = "September") Then GoTo weiter
 If (Monat = 10 And Text = "Oktober") Then GoTo weiter
 If (Monat = 11 And Text = "November") Then GoTo weiter
 If (Monat = 12 And Text = "Dezember") Then GoTo weiter
 'keiner hat gepasst. Tag/Monat tauschen:
 ActiveCell.Value = Mid(Wert, 4, 2) & "." & Mid(Wert, 1, 2) & "." & Mid(Wert, 7, 4)
 'neuenEintrag prüfen
 TestNr = TestNr + 1
 
 'Geduld ist zu Ende !!
 If TestNr = 2 Then
 ActiveCell.Offset(0, 2).Value = "Da steht kein erlaubtes Datum!"
 GoTo weiter
 End If
 GoTo Los
weiter:
 ActiveCell.Offset(1, 0).Activate
Wend
End Sub

Jetzt funzt es!
Erich

Moin Erich,

Warum schreibt er mir denn in C6 „Da steht kein Datum“?
Ich habe die Zeile im Makro zwar gefunden, ich kanns aber
nicht interpretieren.

Wenn in einer Zelle ein „verkehrtes“ Datum steht, kehrt er es
umd. Dann kann es aber immer noch falsch sein (z.B.
15.15.2006). Deshalb dr Prüfdurchgang. Wenn es dann immer noch
kein Datum ist, ist es eben keins!
ABER: Ich habe vergessen, die Variable wieder auf Null zu
stellen!!!
Füge ein:


Los:
TestNr = 0
Wert = ActiveCell.Value

Jetzt sollte es laufen.
(Wenn du die Meldung nicht in Spalte C schreiben willst, musst
du einfach den Wert 3 im offset vergrössern.)

Jetzt läuft es prima. Vielen Dank nochmal, Du hast mir
sehr geholfen.

Gruß

Rolf

Hi Erich,

Du warst schon wieder 2 Minuten schneller als ich :smile:
Alles klar - Bis denn.

Rolf

Sorry, meine letzte Meldung war nicht korrekt!

  1. Die Variable muss am richtigen Ort zurückgestellt werden
  2. November ist nicht 10, sondern 11
  3. Der Text „kein Datum“ ist ungenau: „kein erlaubtes Datum“
    ist besser, da nicht nur 15.15.2006, sondern auch z.B.
    08.12.2006 nicht erlaubt, wegen Spalte B=Februar.
  4. Offset 2 ergibt Spalte C (A+2), Wenn du in F schreiben
    willst, wäre offset = 5

der Einfachheit halber hier mein ganzer korrigierter Code:

Option Explicit
Sub testen()
Dim Monat, Text, Wert, TestNr
Range(„A1“).Select
While ActiveCell.Value > „“
TestNr = 0
Los:
Wert = ActiveCell.Value

'Mit der Formel „Monat = Month(ActiveCell.Value)“
'geht es nicht, weil diese Funktion auch
'die amerikanischen Formate automatisch erkennt!
'deshalb Monat selber „herausschälen“:
Monat = Mid(Wert, 4, 2)

’ mit Trim mögliche Leerschläge in Spalte B entfernen
Text = Trim(ActiveCell.Offset(0, 1).Value)

If (Monat = 1 And Text = „Januar“) Then GoTo weiter
If (Monat = 2 And Text = „Februar“) Then GoTo weiter
If (Monat = 3 And Text = „März“) Then GoTo weiter
If (Monat = 4 And Text = „April“) Then GoTo weiter
If (Monat = 5 And Text = „Mai“) Then GoTo weiter
If (Monat = 6 And Text = „Juni“) Then GoTo weiter
If (Monat = 7 And Text = „Juli“) Then GoTo weiter
If (Monat = 8 And Text = „August“) Then GoTo weiter
If (Monat = 9 And Text = „September“) Then GoTo weiter
If (Monat = 10 And Text = „Oktober“) Then GoTo weiter
If (Monat = 11 And Text = „November“) Then GoTo weiter
If (Monat = 12 And Text = „Dezember“) Then GoTo weiter
'keiner hat gepasst. Tag/Monat tauschen:
ActiveCell.Value = Mid(Wert, 4, 2) & „.“ & Mid(Wert, 1, 2) &
„.“ & Mid(Wert, 7, 4)
'neuenEintrag prüfen
TestNr = TestNr + 1

'Geduld ist zu Ende !!
If TestNr = 2 Then
ActiveCell.Offset(0, 2).Value = „Da steht kein erlaubtes
Datum!“
GoTo weiter
End If
GoTo Los
weiter:
ActiveCell.Offset(1, 0).Activate
Wend
End Sub

Jetzt funzt es!
Erich