Excel: Automatisch Datum einfügen bei Schreiben in eine Zeile?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

nur mit Makro worksheet_change....

Du musst das aber noch etwas konkreter Formulieren: Welche Zellen sollen überwacht werden, wirklich alle?? Wo soll das Datum eingetragen werden, denn zumindest diese Spalte muss man ausschließen, sonst gibt es eine Endlosschleife (Zeile geändert -> Makro startet und trägt Datum ein -> das ist wiederum eine Änderung, Makro läuft wieder und so endlos weiter....)

Datum nur eintragen, wenn etwas erstmals gefüllt wird oder auch bei einer Änderung einer bereits gefüllten Zelle?

YANKOO 
Fragesteller
 19.01.2017, 22:53

Ok wie geht das? Also ich habe quasi eine Tabelle und ich schreibe immer unten was neues dran, demnach würde dann in der nächsten Zeile wieder das Datum reinkommen. Wie krieg ich das hin? Grundlegende Programmierkenntnisse habe ich, nur nicht mit Excel.

0
Ninombre  20.01.2017, 07:21
@YANKOO

wenn das Datum in Spalte A soll:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 Or Cells(Target.Row, 1) <> "" Then Exit Sub
Cells(Target.Row, 1).Value = Date
End Sub

worksheet_change fängt das Event ab, dass eine Änderung vorgenommen wird. Sobald Du also was in die Tabelle schreibst, wird das Makro gestartet. In zwei Fällen soll nichts passieren: Wenn in Spalte A ein Eintrag erfolgt (das führt sonst zu einer Endlosschleife, da ja durch das Eintragen des Datums auch eine Änderung und damit das Makro ausgelöst wird) und wenn schon was drin steht. Das letzte kannst Du auch löschen, dann wird bei Aktualisierierung auch das Datum gesetzt.

Target ist die bearbeitete Zelle (oder Bereich). Target.row die Zeile
cells(target.row,1) ist die Angabe in VBA: erst Zeile, dann Spalte. Also Zeile der bearbeiteten Zelle und Spalte A - dort wird das Datum gesetzt. Wenn es inkl. Uhrzeit sein soll, statt date now eintragen.

Das Makro im VBA Editor (Entwicklerwerkzeuge) zum Tabellenblatt hinterlegen, dass überwacht werden soll.

Wenn Du das Datum nicht in Spalte A haben willst, kannst Du die drei Stellen mit der 1 durch eine andere Spalte (nummerisch!) ersetzen.

0
YANKOO 
Fragesteller
 20.01.2017, 23:30
@Ninombre

Ok das hört sich kompliziert an... hast du vielleicht eine einfache einführung in VBA für mich? Also nochmal zum deutlicherem Verständnis: Wir haben z.b. eine Spalte Einkaufspreis und eine Spalte Verkaufspreis und wenn man jeweils was dort einträgt soll es eine Spalte mit dem Einkaufsdatum und dem Verkaufsdatum geben.

0
YANKOO 
Fragesteller
 20.01.2017, 23:51
@YANKOO

Wie mein Marko implementiert habe ich mir grad angeschaut, das kriege ich jetzt schon hin

0
YANKOO 
Fragesteller
 21.01.2017, 00:17
@YANKOO

C = Einkaufspreis, D = Verkaufspreis, I = Einkaufsdatum, J = Verkaufsdatum

0
Ninombre  21.01.2017, 07:06
@YANKOO
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Cells(Target.Row, 9) = "" Then Cells(Target.Row, 9).Value = Date
If Target.Column = 4 And Cells(Target.Row, 10) = "" Then Cells(Target.Row, 10).Value = Date
End Sub

es wird ein Datum gesetzt, wenn die Änderung in Spalte 3 (=C) erfolgt und in der zugehörigen Zeile in Spalte I noch nichts steht.
Gleiches für D und J

0
YANKOO 
Fragesteller
 21.01.2017, 12:32
@Ninombre

Es passiert irgendwie nichts... laut einem Youtubevideo habe ich es wie folgt gemacht. Visual Basic geöffnet und dann ein neues Modul erstellt und dann dort reinkopiert... muss ich das Worksheet_Change in meine Excelliste umbennen? Also das habe ich gemacht und es ist auch nichts passiert. Was mache ich falsch?

0
Ninombre  21.01.2017, 13:43
@YANKOO

Das darf nicht in ein Modul, sondern muss zum Tabellenblatt, das überwacht werden soll,hinterlegt werden. 

0
YANKOO 
Fragesteller
 21.01.2017, 15:34
@Ninombre

Perfekt! Danke dir! Kann man davon jetzt noch irgendwie eine Funktion schreiben die die Tage zwischen diesen beiden Datums zählt?

0
YANKOO 
Fragesteller
 21.01.2017, 15:37
@YANKOO

Ich könnte mir irgendwie was vorstellen, was quasi anfängt hochzuzählen wenn das Datum eingetragen wird und aufhört hochzuzählen wenn das nächste Datum eingetragen wird

0
Ninombre  21.01.2017, 18:49
@YANKOO

Du könntest in einer Spalte die Differenz mit einer normalen Formel berechnen:

=wenn(anzahl2(i2:j2)=2;j2-i2;"")
Entsprechend in der Spalte runterziehen.

Das gleiche kann man auch ins Makro einbauen:

 

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Cells(Target.Row, 9) = "" Then Cells(Target.Row, 9).Value = Date
If Target.Column = 4 And Cells(Target.Row, 10) = "" Then Cells(Target.Row, 10).Value = Date
If WorksheetFunction.CountA(Range(Cells(Target.Row, 9), Cells(Target.Row, 10))) = 2 Then Cells(Target.Row, 11).Value = Cells(Target.Row, 10).Value - Cells(Target.Row, 9).Value
End Sub
0