Excel: B Zahleneingabe, A automatisch aktuelles Datum einfügen, geht das?
Ich möchte jedes mal wenn ich bei B eine Zahl einfüge, in eine neue Spalte, dass dann bei A das aktuelle Datum eingefügt wird. Geht das?
5 Antworten
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.
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.
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.
Vielleicht weißt du ja auch einen Weg, wie das immer so sein soll. So muss ich das ja in jede Zeile einzeln eintragen.
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.
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?
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 ^^
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.
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
Dann hatte ich wohl Recht.
Schau Dir lamiams Antwort er, er hat die
des Problems gepostet.
da haben wir uns gleich doppelt zeitlich überschnitten, aber danke für den Hinweis, IMMER merk ich das nicht selbst!
=WENN(A1<>0;heute();"")
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)