Supportnet / Forum / Tabellenkalkulation
Datumsproblem: 020406 -> 02.04.2006 Wie sag ich´s Excel?
Frage
Hallo und guten Morgen,
meine lieben Kollegen sollen eine Liste fuellen, in der unter anderem jeweils auch ein Datum pro Zeile eingegeben werden soll. Natuerlich jeweils ein anderes und meist nicht das aktuelle.
Nun ist der Nummernblock ja recht griffig, aber Excel will partout einen Punkt (oder ein Minus-Zeichen) als Trenner zw. Tag, Monat und Jahr, sodass eine "schnelle" Eingabe der Daten kaum oder zumindest nicht besonders benutzerfreundlich gegeben ist.
Wie also krieg ich es hin, meinen Kollegen eine Arbeitserleichterung einzubauen, die aus der Eingabe einer sechsstelligen Zahl (120806) automagisch das gewuenschte Datum (12.08.2006) zaubert, am Besten auch in der gleichen Zelle, in der die Eingabe erfolgte?
Leise weinend,
Der Thomas, im Vorab dankbar fuer jeden Tippppp
Antwort 1 von cmkatz
Hallo,
das geht mit VBA...
dazu aber noch eine Frage: wird das Datum immer in einer bestimmten Spalte eingegeben?
Wenn ich was weiß, poste ich...
Gruß
cmkatz
das geht mit VBA...
dazu aber noch eine Frage: wird das Datum immer in einer bestimmten Spalte eingegeben?
Wenn ich was weiß, poste ich...
Gruß
cmkatz
Antwort 2 von DerThomas
Hallo erneut,
Jepp, das Datum (bzw. als Vorstufe die sechs Ziffern en block -> 030406) werden immer in der gleichen Spalte eingegeben, genaugenommen sogar in drei Spalten:
____A________B________C________D____
Kunde A01 040406 Kunde B01 020306
Kunde A02 030106 Kunde B02 120805
Analog dann auch fuer Kundengruppe C (Spalten E und F).
Besten Dank. ;o)
LG,
Der Thomas
Jepp, das Datum (bzw. als Vorstufe die sechs Ziffern en block -> 030406) werden immer in der gleichen Spalte eingegeben, genaugenommen sogar in drei Spalten:
____A________B________C________D____
Kunde A01 040406 Kunde B01 020306
Kunde A02 030106 Kunde B02 120805
Analog dann auch fuer Kundengruppe C (Spalten E und F).
Besten Dank. ;o)
LG,
Der Thomas
Antwort 3 von DerThomas
*die Ingrid machend*
Hallo nochmal,
sollte es die Struktur (drei Kundengruppen nebeneinander) zu umstaendlich machen, ein Script dafuer zu stricken, reicht auch eine Kundengruppe pro Zeile (also nur eine Spalte pro Zeile fuer die Datumsumwandlung). Hauptsache, meine Leute muessen nicht dauernd "umgreifen", um den Punkt oder das unsinnige Minuszeichen einzufuegen, wenn sie das Datum reinklopfen.
Besten Dank allen Interessierten,
Der Thomas
Hallo nochmal,
sollte es die Struktur (drei Kundengruppen nebeneinander) zu umstaendlich machen, ein Script dafuer zu stricken, reicht auch eine Kundengruppe pro Zeile (also nur eine Spalte pro Zeile fuer die Datumsumwandlung). Hauptsache, meine Leute muessen nicht dauernd "umgreifen", um den Punkt oder das unsinnige Minuszeichen einzufuegen, wenn sie das Datum reinklopfen.
Besten Dank allen Interessierten,
Der Thomas
Antwort 4 von cmkatz
Hallo,
erster Versuch:
Diesen Code markieren und in Excel im VBA-Editor in Tabelle1(Tabelle1) rein kopieren...
Gruß
cmkatz
erster Versuch:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim col As Integer
Dim tmpDat As Long
Dim tag As Integer
Dim monat As Integer
Dim jahr As Integer
col = ActiveCell.Column
´col = 2 => Spalte B
´col = 4 => Spalte D
´col = 6 => Spalte F
If col = 2 Or col = 4 Or col = 6 Then
If Len(ActiveCell.Value) > 0 Then
tmpDat = ActiveCell.Value
tag = Left(tmpDat, 2)
monat = Mid(tmpDat, 3, 2)
jahr = Right(tmpDat, 2)
If jahr > 50 Then
jahr = "19" & jahr
Else
If jahr < 10 Then
jahr = "200" & jahr
Else
jahr = "20" & jahr
End If
End If
ActiveCell.Value = tag & "." & monat & "." & jahr
End If
End If
End Sub
Diesen Code markieren und in Excel im VBA-Editor in Tabelle1(Tabelle1) rein kopieren...
Gruß
cmkatz
Antwort 5 von DerThomas
Hi cmkatz,
cooler Ansatz, funktionert leider nur ansatzweise.
Habe die zugehoerigen Spalten als "Datum" (tt.mm.jjjj) formatiert.
Gebe ich das Datum 020202 ein und tippe auf <Tab>, um in die naechste Spalte zu huepfen, steht ein errechnetes "Excel-Datum" drin (23.04.1955). Klicke ich mit dem Cursor auf die Zelle oder springe per Tastatur zurueck in die Zelle, dann bastelt das Script ein 20.20.2002.
Ich fuerchte, das isses noch nicht 100pro. Muss ich wohl weitergruebeln. Danke dennoch ganz doll fuer Dein Engagement!!!
LG,
Der Thomas
cooler Ansatz, funktionert leider nur ansatzweise.
Habe die zugehoerigen Spalten als "Datum" (tt.mm.jjjj) formatiert.
Gebe ich das Datum 020202 ein und tippe auf <Tab>, um in die naechste Spalte zu huepfen, steht ein errechnetes "Excel-Datum" drin (23.04.1955). Klicke ich mit dem Cursor auf die Zelle oder springe per Tastatur zurueck in die Zelle, dann bastelt das Script ein 20.20.2002.
Ich fuerchte, das isses noch nicht 100pro. Muss ich wohl weitergruebeln. Danke dennoch ganz doll fuer Dein Engagement!!!
LG,
Der Thomas
Antwort 6 von cmkatz
Hallo,
wie gesagt, war auch der erste Versuch! Hier der zweite:
Gruß
cmkatz
wie gesagt, war auch der erste Versuch! Hier der zweite:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim col As Integer
Dim row As Integer
Dim tmpDat As Long
Dim tag As Integer
Dim monat As Integer
Dim jahr As Integer
col = Target.Column
´col = 2 => Spalte B
´col = 4 => Spalte D
´col = 6 => Spalte F
If Target.Column = 2 Or Target.Column = 4 Or Target.Column = 6 Then
Application.EnableEvents = False
row = Target.row
´datum muß als 6stellige Zahl (ttmmjj) eingegeben werden!
If Len(Cells(row, col).Value) = 6 Then
tmpDat = Cells(row, col).Value
tag = Left(tmpDat, 2)
monat = Mid(tmpDat, 3, 2)
jahr = Right(tmpDat, 2)
If jahr > 50 Then
jahr = "19" & jahr
Else
If jahr < 10 Then
jahr = "200" & jahr
Else
jahr = "20" & jahr
End If
End If
Cells(row, col).Value = tag & "." & monat & "." & jahr
End If
Application.EnableEvents = True
End If
End Sub
Gruß
cmkatz
Antwort 7 von cmkatz
dritter Versuch...
Gruß
cmkatz
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim col As Integer
Dim row As Integer
Dim tmpDat As Long
Dim tag As Integer
Dim monat As Integer
Dim jahr As Integer
col = Target.Column
´col = 2 => Spalte B
´col = 4 => Spalte D
´col = 6 => Spalte F
If Target.Column = 2 Or Target.Column = 4 Or Target.Column = 6 Then
Application.EnableEvents = False
row = Target.row
´datum muß als 6stellige Zahl (ttmmjj) eingegeben werden!
If Len(Cells(row, col).Value) = 6 Then
tmpDat = Cells(row, col).Value
tag = Left(tmpDat, 2)
monat = Mid(tmpDat, 3, 2)
jahr = Right(tmpDat, 2)
If monat < 10 Then
monat = "0" & monat
End If
If jahr > 50 Then
jahr = "19" & jahr
Else
If jahr < 10 Then
jahr = "200" & jahr
Else
jahr = "20" & jahr
End If
End If
Cells(row, col).Value = tag & "." & monat & "." & jahr
End If
Application.EnableEvents = True
End If
End Sub
Gruß
cmkatz
Antwort 8 von cmkatz
sorry, gleich noch eine Verbesserung hinterher:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim col As Integer
Dim row As Integer
Dim tmpDat As Long
Dim tag As String
Dim monat As String
Dim jahr As String
col = Target.Column
´col = 2 => Spalte B
´col = 4 => Spalte D
´col = 6 => Spalte F
If Target.Column = 2 Or Target.Column = 4 Or Target.Column = 6 Then
Application.EnableEvents = False
row = Target.row
´datum muß als 6stellige Zahl (ttmmjj) eingegeben werden!
If Len(Cells(row, col).Value) = 6 Then
tmpDat = Cells(row, col).Value
tag = Left(tmpDat, 2)
monat = Mid(tmpDat, 3, 2)
jahr = Right(tmpDat, 2)
If jahr > 50 Then
jahr = "19" & jahr
Else
jahr = "20" & jahr
End If
Cells(row, col).Value = tag & "." & monat & "." & jahr
End If
Application.EnableEvents = True
End If
End Sub
Antwort 9 von Ultraerpel
Also wenn nicht weiter damit gerechnet wird, ist es mehr als einfach, die Datumssplaten Benutzerdefiniert:
00"."00"."00
und schon geht es
00"."00"."00
und schon geht es
Antwort 10 von DerThomas
Hui,
danke. Das Script Nr. 3 funktioniert in allen Faellen, in denen keine "fuehrende" Null bei Tag, Monat oder Jahr vorkommt, blendend. Falls bei Monat aber eine Null fuehrt, veraendert sich das erscriptete Datum, indem der Monat einfach durch einen unsinnigen anderen Monat ersetzt wird. Fuehrt bei Tag eine Null, so stimmt das ganze Datum nicht.
Wie kann man das abfangen?
LG,
Der Thomas
danke. Das Script Nr. 3 funktioniert in allen Faellen, in denen keine "fuehrende" Null bei Tag, Monat oder Jahr vorkommt, blendend. Falls bei Monat aber eine Null fuehrt, veraendert sich das erscriptete Datum, indem der Monat einfach durch einen unsinnigen anderen Monat ersetzt wird. Fuehrt bei Tag eine Null, so stimmt das ganze Datum nicht.
Wie kann man das abfangen?
LG,
Der Thomas
Antwort 11 von DerThomas
Hi Ultraerpel,
so geht´s natuerlich auch... besten Dank. ;o)
Der *kleinlaut erroetende* Thomas, die Scriptvariante von cmkatz dennoch irgendwie liebgewonnen habend
so geht´s natuerlich auch... besten Dank. ;o)
Der *kleinlaut erroetende* Thomas, die Scriptvariante von cmkatz dennoch irgendwie liebgewonnen habend
Antwort 12 von cmkatz
und mich läßt der Ehrgeiz nicht los... ;-))
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim col As Integer
Dim row As Integer
Dim tmpDat As String
Dim tag As String
Dim monat As String
Dim jahr As String
Dim laenge As Integer
col = Target.Column
´col = 2 => Spalte B
´col = 4 => Spalte D
´col = 6 => Spalte F
If Target.Column = 2 Or Target.Column = 4 Or Target.Column = 6 Then
Application.EnableEvents = False
row = Target.row
If Len(Cells(row, col).Value) > 3 Then
tmpDat = Cells(row, col).Value
laenge = Len(Cells(row, col))
Select Case laenge
Case 4
tag = "0" & Left(tmpDat, 1)
monat = "0" & Mid(tmpDat, 2, 1)
Case 5
tag = "0" & Left(tmpDat, 1)
monat = Mid(tmpDat, 2, 2)
Case 6
tag = Left(tmpDat, 2)
monat = Mid(tmpDat, 3, 2)
End Select
jahr = Right(tmpDat, 2)
If jahr > 50 Then
jahr = "19" & jahr
Else
jahr = "20" & jahr
End If
Cells(row, col).Value = tag & "." & monat & "." & jahr
End If
Application.EnableEvents = True
End If
End Sub
Antwort 13 von DerThomas
Hi cmkatz,
funktioniert richtig gut. ;o) Reeeeiiiiicht!!!
Fuer die Plausibilitaet eines eingegebenen Datums (a la "33.13.99") sollten die lieben Kollegen dann bitte schon selbst sorgen. ;o)
Vielen Dank fuer die Hilfe, ich moechte Eure Zeit nicht laenger stehlen. Ihr habt mir sehr geholfen, meinen inneren Frieden (und vor allem den vor den bohrenden Fragen der Kollegen) wiederzufinden.
LG,
Der Thomas
funktioniert richtig gut. ;o) Reeeeiiiiicht!!!
Fuer die Plausibilitaet eines eingegebenen Datums (a la "33.13.99") sollten die lieben Kollegen dann bitte schon selbst sorgen. ;o)
Vielen Dank fuer die Hilfe, ich moechte Eure Zeit nicht laenger stehlen. Ihr habt mir sehr geholfen, meinen inneren Frieden (und vor allem den vor den bohrenden Fragen der Kollegen) wiederzufinden.
LG,
Der Thomas
Antwort 14 von Risatara2
Nur um den Besserwisser raushängen zu lassen (Mit deinem Wert kann man nicht Rechnen cmkatz), habe ich einige kleine Veränderungen an deinem Script vorgenommen (hoffe das war gestattet):
Man muss die Wertanzeige dieser Spalte auf Datum stellen. Fehlerhafte Werte wandelt er um (zB den 33.03.06 in den 02.04.06)... Und man kann das Datum so aussehen lassen wie man will.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim col As Integer
Dim row As Integer
Dim lngval As Variant
Dim tmpDat As String
Dim tag As String
Dim monat As String
Dim jahr As String
col = Target.Column
´col = 2 => Spalte B
´col = 4 => Spalte D
´col = 6 => Spalte
If Target.Column = 2 Or Target.Column = 4 Or Target.Column = 6 Then
Application.EnableEvents = False
row = Target.row
´datum muß als 6stellige Zahl (ttmmjj) eingegeben werden!
lngval = CLng(Cells(row, col).Value)
If Len(lngval) = 5 Then tmpDat = "0" & lngval Else tmpDat = lngval
If Len(tmpDat) = 6 Then
tag = Left(tmpDat, 2)
monat = Mid(tmpDat, 3, 2)
jahr = Right(tmpDat, 2)
If jahr > 50 Then
jahr = "19" & jahr
Else
jahr = "20" & jahr
End If
Cells(row, col).Value = CLng(DateSerial(jahr, monat, tag))
End If
Application.EnableEvents = True
End If
End Sub
Man muss die Wertanzeige dieser Spalte auf Datum stellen. Fehlerhafte Werte wandelt er um (zB den 33.03.06 in den 02.04.06)... Und man kann das Datum so aussehen lassen wie man will.
Antwort 15 von nostalgiker6
Mal ganz am Rande:
Ich finde, es ist ein Armutszeugnis (und ärgert mich immer wieder), dass EXCEL - und meines Wissens alle Office-Programme - diese eingabefreundliche Trennung von Eingabe- und Ausgabeformat nicht von selbst beherrscht!!!
Ich finde, es ist ein Armutszeugnis (und ärgert mich immer wieder), dass EXCEL - und meines Wissens alle Office-Programme - diese eingabefreundliche Trennung von Eingabe- und Ausgabeformat nicht von selbst beherrscht!!!
Antwort 16 von DerThomas
Hi nochmal,
Das Ganze ist immer mehr als nur die Summe seiner Teile!
Ich muss neidlos anerkennen, dass dieses Forum KLASSE ist - auch und vor allem durch die Zusammenarbeit seiner Mitglieder und Leser - und der manchmal sicherlich recht unbedarften Fragen von Laien wie mir. ;o)
Vielen Dank fuer alle Hilfe. Weiter so!!!1
LG,
Der Thomas
Das Ganze ist immer mehr als nur die Summe seiner Teile!
Ich muss neidlos anerkennen, dass dieses Forum KLASSE ist - auch und vor allem durch die Zusammenarbeit seiner Mitglieder und Leser - und der manchmal sicherlich recht unbedarften Fragen von Laien wie mir. ;o)
Vielen Dank fuer alle Hilfe. Weiter so!!!1
LG,
Der Thomas
Antwort 17 von Risatara2
@Nostalgiker: Da stimme ich dir fast voll und ganz zu. Mir fehlt das auch immer mal wieder, weil ich meine Daten eben nicht so eingeben will, wies das sch...excel von mir verlangt. Aber ich glaube man kann das bei Access irgendwie einstellen... Bin da aber nicht sicher..
Antwort 18 von cmkatz
@Risatara2:
für Verbesserungen bin ich jederzeit offen! ;-))
Gruß
cmkatz
für Verbesserungen bin ich jederzeit offen! ;-))
Gruß
cmkatz
Antwort 19 von public
hallo, wieso reicht als eingabe nicht datum.monat return?
Antwort 20 von Risatara2
Das könnte man auch ähnlich in VBA schreiben, wenn du sowas brauchst. Es könnte dann bei 4stelligen Zahlen die aktuelle Jahreszahl ergänzen. Da wäre dann aber kein Punkt dazwischen. Wenn du sowas brauchst, kann ich das auch machen ;)
Das dumme wäre nur, wenn das nicht in bestimmten Spalten so sein muss, dann muss man nämlich doch den Punkt einführen, und dann wirds kompliziert.
Das dumme wäre nur, wenn das nicht in bestimmten Spalten so sein muss, dann muss man nämlich doch den Punkt einführen, und dann wirds kompliziert.
Antwort 21 von CaroS
Hut ab vor allen,
die in so kurzer Zeit so viel zusammengetragen haben! Da ich mich oft für die einfachen Dinge am meisten begeistern kann, möchte ich den Vorschlag von Ultraerpel (Antwort 9) aufgreifen und ergänzen. Es ist ja meist nicht viel, was der Mensch braucht, um glücklich zu sein. In diesem Fall könnte man glatt mit 2 Spalten auskommen, eine zum Eingeben (1), Anzeigen und Ausdrucken und eine zum Rechnen (2) und für manchen ist vielleicht eine Variante ohne VBA lieber oder leichter zu erweitern.
(1) Siehe oben: Spalte mit benutzerdefiniertem Format 00"."00"."00 (Copyright Ultraerpel).
(2) lässt sich mit einfach mit Textfunktionen und DATUM machen:
B1: =DATUM(RECHTS(A1;2);LINKS(RECHTS(A9;4);2);LINKS(RECHTS("0" & A9;6);2))
Da die Eingabe "020202" (in A1) als Zahl behandelt wird und der Tag schnell mal seine führende Null einbüßt, muss man sie ihm wiedergeben, ganz klar. Die Parameter der
DATUM-Funktion sind also:
Jahr: = RECHTS(A1;2)
Monat: = LINKS(RECHTS(A1;4);2
Tag: = LINKS(RECHTS("0" & A1;6);2)
Falls man diese Spalte zur Anzeige benutzt, kann man sie noch als Datum "TT.MM.JJ" formatieren, aber Datumsrechnung geht auch ohne. - DerThomas hat nun die Wahl.
Gruß,
CaroS
die in so kurzer Zeit so viel zusammengetragen haben! Da ich mich oft für die einfachen Dinge am meisten begeistern kann, möchte ich den Vorschlag von Ultraerpel (Antwort 9) aufgreifen und ergänzen. Es ist ja meist nicht viel, was der Mensch braucht, um glücklich zu sein. In diesem Fall könnte man glatt mit 2 Spalten auskommen, eine zum Eingeben (1), Anzeigen und Ausdrucken und eine zum Rechnen (2) und für manchen ist vielleicht eine Variante ohne VBA lieber oder leichter zu erweitern.
(1) Siehe oben: Spalte mit benutzerdefiniertem Format 00"."00"."00 (Copyright Ultraerpel).
(2) lässt sich mit einfach mit Textfunktionen und DATUM machen:
B1: =DATUM(RECHTS(A1;2);LINKS(RECHTS(A9;4);2);LINKS(RECHTS("0" & A9;6);2))
Da die Eingabe "020202" (in A1) als Zahl behandelt wird und der Tag schnell mal seine führende Null einbüßt, muss man sie ihm wiedergeben, ganz klar. Die Parameter der
DATUM-Funktion sind also:
Jahr: = RECHTS(A1;2)
Monat: = LINKS(RECHTS(A1;4);2
Tag: = LINKS(RECHTS("0" & A1;6);2)
Falls man diese Spalte zur Anzeige benutzt, kann man sie noch als Datum "TT.MM.JJ" formatieren, aber Datumsrechnung geht auch ohne. - DerThomas hat nun die Wahl.
Gruß,
CaroS

