Excel: B Zahleneingabe, A automatisch aktuelles Datum einfügen, geht das?

Bild 1 - (Computer, PC, Microsoft)

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Du musst Dir immer vor Augen halten, dass Formeln in Abhängigkeit von den sie beliefernden Zellen etwas berechnen. Bei heute()/jetzt() kommt aber die Systemzeit dazu, die Du nicht einfach beeinflussen kannst/willst. So würde Dir bei einer Formel morgen ein anderer Wert links daneben stehen als heute, schlimmer noch: der heutige Wert ist dann verschwunden!
Wenn Du nicht nachher über kopieren+inhalte einfügen-WERTE die Formel als Wert fixieren willst (was genauso aufwändig wäre wie das Eintippen des Datums), musst Du über ein Makro das Datum als festen Wert setzen.
Klicke auf das Kontext-Menü(rechte Maustaste) der Blattnamensfahne ("Reiter", aber unten), wähle Code anzeigen und füge in das sich öffnende Modul-Blatt folgendes Makro ein:

Private Sub Worksheet_Change(ByVal Target As Range) 'Trägt akt. Datum in A:A ein, wenn in B:B Zahl eingetragen wird
If Not Intersect(Target.Cells(1), ActiveSheet.Columns(2).Cells) Is Nothing Then
If IsNumeric(Target.Value) Then Target.Cells(1).Offset(0, -1) = Date 'kann auch Today(), Now() oder Time sein End If
End Sub

Das Makro wird nur aktiv, wenn in eine Zelle der Spalte B (=Columns(2) was eingetragen wird, und es ist spezifisch für links daneben (=.offset(0, -1) Andere Änderungen oder Änderungen woanders müssen separat programmiert werden, evtl in zusätzlichen Zeilen desselben Makros.


Iamiam  02.11.2012, 11:06

Da ist ein Zeilenumbruch verschluckt worden, ausserdem gehen Today(), Now() in dieser Form nicht und Time liefert nur die Tageszeit (ohne Datum): zusammen hieße das Date + Time
i.F. hab ich noch einen Überschreibschutz eingebaut, (kann sinnvoll sein oder nicht*) hier nochmal das Makro:

Private Sub Worksheet_Change(ByVal Target As Range)
'Trägt akt. Datum in A:A ein, wenn in B:B Zahl eingetragen wird
If Not Intersect(Target.Cells(1), ActiveSheet.Columns(2).Cells) Is Nothing Then
If IsNumeric(Target.Value) Then if isempty(Target.Cells(1).Offset(0, -1)) then Target.Cells(1).Offset(0, -1) = Date
'kann auch Date + Time (Datum+Uhrzeit) sein
End If
End Sub

*) Der Überschreibschutz erlaubt spätere Korrekturen des Zahleneintrags, andererseits wird dieser Eintrag dadurch manipulierbar. Da xl aber sowieso in der einfachen Form nicht Dokumenten-fest ist, kann man eines von beiden wahlweise programmieren.
Zwischen Nothing und Then ist kein Zeilenumbruch, ebenso nicht zwischen dem übernächsten then und target.Cells(1) die werden nur durch die Zeilenlänge hier so dargestellt (zumindest bei mir in der Vorschau)

Iamiam  02.11.2012, 11:10
@Iamiam

da haben wir uns gleich doppelt zeitlich überschnitten, aber danke für den Hinweis, IMMER merk ich das nicht selbst!

Iamiam  04.11.2012, 20:37
@Iamiam

danke für * und K !

Noch eine kurze Erklärung: Es gibt in VBA zwei if...then - Varianten: die "normale" mit
if ... then
dann-Befehl
Else (oder Elseif und Else )
sonst-Befehl
End If <erforderlich

Daneben gibt es die "Einzeilige" Variante, wenn kein Else nötig ist:

if ... then dann-Befehle, auch weitere einzeilige ifs möglich,

wie im obigen Beispiel: Theoretisch hätte man sogar alle drei if-Abfragen in eine einzige Zeile packen können.

Oubyi, UserMod Light  02.11.2012, 10:47
DH!

Kleine Korrektur:
Das "End if" rutsch beim reinen kopieren des Codes in den Kommentar. SO sollte es besser klappen:

Private Sub Worksheet_Change(ByVal Target As Range) 'Trägt akt. Datum in A:A ein, wenn in B:B Zahl eingetragen wird
If Not Intersect(Target.Cells(1), ActiveSheet.Columns(2).Cells) Is Nothing Then
If IsNumeric(Target.Value) Then Target.Cells(1).Offset(0, -1) = Date 'kann auch Today(), Now() oder Time sein
End If
End Sub

Bei Google Drive ist diese Formel in Zelle A2 einzusetzen: =if(B2="";"";today()) bei Excel funktioniert diese Formel: =WENN(B2="";"";HEUTE())

Die Formel kannst Du dann runterkopieren.


philosophus 
Beitragsersteller
 02.11.2012, 08:31

Vielleicht weißt du ja auch einen Weg, wie das immer so sein soll. So muss ich das ja in jede Zeile einzeln eintragen.

MisterMusic86  02.11.2012, 08:39
@philosophus

Also wenn du eingibst B4 bis B99 dann fügt er nur dann das Datum ein, wenn ALLE von B4 bis B99 gefüllt sind. Du kannst die Formel ganz einfach runterkopieren, dazu gehst du in die Zelle wo die formel drin steht klickst an den rechten unteren Rand der Zelle und ziehst sie einfach nach unten. Dadurch wird die Formel automatisch verändert. Das heißt in der Zweiten Zeile steht dann nicht mehr A1 und B1 sondern A2 und B2 usw.

philosophus 
Beitragsersteller
 02.11.2012, 08:16

Danke, die Formel von MisterMusic86 funktioniert auch. Aber eine Verständnisfrage:

=IF(B4:B99<>0;today();"")

Das heißt also, wenn (IF) B4 bis B99 (B4:B99) leer (<>0) sind, dann füge das heutige Datum (today) ein, sonst füge nichts ein (;""), oder?

Was könnte man in today() noch in die Klammer setzen?

Oubyi, UserMod Light  02.11.2012, 09:39
@philosophus

Was könnte man in today() noch in die Klammer setzen?

TODAY() erwartet (und erlaubt) keine Argumente in der Klammer.
Die leere Klammer muss aber trotzdem gesetzt werden, weil das in Excel das bei einer Funktion erwartet.

Guten Morgen philosophus,

das geht so:

In die Spalte B gibt man ein: =wenn(A?<>0;heute();"")

Du darfst aber nicht vergessen, die Spalte B als Datum zu formatieren. :-)

Gruß pickpocket ^^


philosophus 
Beitragsersteller
 02.11.2012, 08:29

Guten Morgen und gratias ago.

Ich denke:
=WENN(B1<>"";HEUTE();"")
ist nicht wirklich das, was Du willst.
Denn dann steht dort IMMER das aktuelle Datum.
Wenn Du also heute etwas in B1 schreibst, steht da zwar heute der 02.11, aber morgen steht dann dort der 03.11.
Ich denke aber, Du möchtest dort das Datum stehen haben, an dem der Eintrag in B1 gemacht wurde!?
DAS lässt sich nur über ein Ereignis-Makro, also einen VBA-Code erreichen.
Wenn ich Recht habe und bei Dir Makros zugelassen sind, dann sag hier kurz Bescheid, dann erkläre ich Dir, was Du machen musst.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

jojagagu  26.01.2022, 14:01

Ich bekomme einen Fehler und kann es nicht abspeichern

Change(ByVal Target As Range) 'Trägt akt. Datum in D2:D999 ein, wenn in B2:B9999 Zahl eingetragen wird

If Not Intersect(Target.Cells(D2:D999), ActiveSheet.Columns(B2:B9999).Cells) Is Nothing Then

If IsNumeric(Target.Value) Then if isempty ((D2:D999).Offset(0, -1)) = Date+TIME

End If

End Sub

Syntaxfehler: SyntaxError: missing ) after argument list Zeile: 3 Datei: Makros.gs

philosophus 
Beitragsersteller
 02.11.2012, 09:35

Gut, dass du das erwähnst.

Iamiam  02.11.2012, 11:10
@Oubyi, UserMod Light

da haben wir uns gleich doppelt zeitlich überschnitten, aber danke für den Hinweis, IMMER merk ich das nicht selbst!

=WENN(A1<>0;heute();"")


philosophus 
Beitragsersteller
 02.11.2012, 08:11

=IF(B4:B99<>0;today();""

Danke :)