Automatische Füllen von Zellen mit Datum?

4 Antworten

Ich hab das Makro von Ninombre nicht ausprobiert, aber ich musste bei
meinem etliche Nebeneffekte ausschließen. Es geht für alle Zellen des
Arbeitsblattes und heißt:

Sub Worksheet_change(ByVal Target As Range)
Dim trotzdem
If Not Intersect(Target, Range("A1:XFD1048576")) Is Nothing Then
If Target.Cells.Count > 1 Then Exit Sub
If Not IsEmpty(Target) And Target = Date Then Exit Sub 'damit nicht für alle leeren Zellen rechts davon wiederholt wird! Einzeilige if-Variante
If Not IsEmpty(Target.Offset(0, 1)) Then
trotzdem = MsgBox("Zelle schon belegt! mit neuem Datum überschreiben?", vbYesNo)
If trotzdem = vbNo Then Exit Sub 'einzeilige if-Variante
End If
Target.Offset(0, 1) = Date
End If
End Sub


Das "Not intersect(..." verhindert Fehler, wenn ein Objekt (Grafik, Textfeld, Kommentar etc) ausgewählt wird.
*): Der ausgeführte Datumseintrag würde sofort einen neuen SubAufruf verursachen und alle leeren Zellen rechts davon füllen.

Das Cells.count >1 erlaubt Löschen von Bereichen und vermeidet Fehlermeldung, wenn Bereich ausgewählt. Das Datum wird trotzdem eingetragen, aber nicht beim Löschen! (gewünscht? ggf auskommentieren mit ' davor)

Das Wichtigste: If Not Isempty ist ein Überschreibschutz für vorhandene Einträge.

Die einzeilige If-Variante benötigt kein end if, hat aber auch kein Else oder Elseif

Hoffe, es funktioniert! Sollten trotzdem Fehler auftreten, bitte ich um Rückmeldung!


Iamiam  21.01.2016, 01:14

falls mit Nachbarzelle die links daneben gemeint ist, dann

.Offset(0, -1)

Das ergibt aber Fehler bei Einträgen in Spalte A! (obige bei Einträgen in Spalte XFD, was praktisch nie vorkommt, in xl97-2003 Spalte iv)

0

=WENN(NICHT(ISTLEER(Zellbezug)); HEUTE();"")

Die Datumszelle muss natürlich zur Datumsanzeige entsprechend formatiert werden.


Die Formel von Herb ist genau die richtige: Allerdings musst Du bedenken, dass heute() dynamisch ist, also kein fester Wert. Wenn die Datei am nächsten Tag geöffnet wird, steht eben der neue Tag drin.

Die andere Variante geht nur über VBA/Makro - kein großes Ding, aber eben nicht mehr mit Formeln zu erreichen.


sauerpeter88 
Beitragsersteller
 20.01.2016, 17:47

Achso. Nee, der Wert soll fest bleiben. Wie mache ich das mit VBA/Makro? Klingt komplziert... Brauche ich da was zusätzliches? :(


0
Ninombre  20.01.2016, 19:43
@sauerpeter88

Unter dem Ribbon Entwicklertools gibt es "Visual Basic". Sollte es den Auswahlpunkt noch nicht geben: http://www.office2010-blog.de/de/start/officeandmore/entwicklertools-in-office-2010-anzeigen

Dort werden dann in einem kleinen Menü links die vorhandenen Tabellenblätter angezeigt. Folgender Code muss zum Tabellenblatt hinterlegt werden, auf dem die Änderungen überwacht werden sollen:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 1 Then Exit Sub
For i = 1 To 100
If Cells(i, 1).Value <> "" And Cells(i, 2).Value = "" Then Cells(i, 2).Value = Now()
Next
End Sub

Das ist eine einfache Variante, die aber funktionieren sollte.
Was du für deinen konkreten Fall anpassen muss ist fett markiert, also
- in welcher Spalte eine Eingabe kommt
- in welcher dann das Datum gesetzt werden soll.
- welcher Bereich geprüft werden soll.

Ich bin davon ausgegangen, dass bei nachträglichen Änderungen, d.h. wenn schon ein Datum gesetzt wurde, dieses nicht mehr geändert wird. Wenn gewünscht, kann man das auch weglassen und das Datum immer wieder überschreiben.

Momentan wird die Eingabe in Spalte A (in VBA numerisch geführt, also 1) erwartet Das betrifft die Angaben Target.Column und cells(i,1)

Das Datum wird in Spalte B gesetzt, das sind die Angaben cells(i,2)

und momentan A1:A100 betrachtet, das for i=1 to 100.

0
sauerpeter88 
Beitragsersteller
 21.01.2016, 11:01
@Ninombre

Erstmal vielen Dank. Vielleicht könntest du mir nochmal kurz beim anpassen helfen. Also der Wert wird bei mir in E3 gesetzt, das Datum soll dann in B3 erscheinen.

Für die nachfolgenden Zellen soll das dann identisch sein => E4 Wert, Datum B4 etc.

Ich hab mich mal probiert:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 1 Then Exit Sub
For i = 1 To 100
If Cells(i, E3).Value <> "" And Cells(i, B3).Value = "" Then Cells(i, B3).Value = Now()
Next
End Sub

0
Ninombre  21.01.2016, 12:14
@sauerpeter88

Die Zellangaben in VBA sind numerisch und abweichen von den Tabellen erst Zeile dann Spalte, E3 ist also cells(3,5). Der Wert 3 - x wird über die Variable i erstellt. Probier es mal so:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 1 Then Exit Sub
For i = 3 To 100
If Cells(i, 5).Value <> "" And Cells(i, 2).Value = "" Then Cells(i, 2).Value = Now()
Next
End Sub

0

=WENN(A1="";"";HEUTE())

Diese Zellen als Datum formatieren