Was muss man in Excel eingeben, damit das Datum nicht aktualisiert wird?
Hallo, ich habe wieder eine Excel Frage: ich habe eine Tabelle, Spalten A-H. In der Spalte G habe ich den Status, wo ich eine DropDown-Liste habe und zwischen: "in Bearbeitung", "Material bestellt", [...], "erledigt" auswählen kann. In Spalte H habe ich als Überschrift "erledigt am", es soll also in Spalte H, sobald ich in Spalte G den Status "erledigt" ausgewäht habe, das aktuelle Datum erscheinen. Ich habe also in Spalte H folgende Formel: "=WENN(G50="erledigt";TEXT(JETZT();"TT.MM.JJ");"")". Ich glaube, ihr wisst, worauf ich hinaus wil, also nach dem Speichern soll dich das Datum nicht ändern, tut es aber natürlich. (Ist ja klar!) Aber, da ich erst seit ein paar Monaten mit Excel arbeiten, habe ich noch keine Ahnung. Durch das Stöbern im Internet, habe ich rausgefunden, dass es nicht einfach so funktioniert (oder doch?), sondern, dass man dafür ein Makro braucht (wovon ich absolut keine Ahnung habe). Also so weit bin ich: ich habe die Tabelle offen vor mir, ich klicke auf den Tabellen-Namen und klicke auf "Code anzeigen", dann öffnet sich ja ein Makro Fenster. So, was soll ich nun machen? Ihr wisst ja, welche Spalte ich brauche, es wäre schön einen Code zu haben. :-) Und wenn ich da den Code eingefügt habe, was muss ich dann machen? Ich würde dann auf "speichern" klicken, dann öffnet er ja ein Fenster und weist mich darauf hin, dass ich die Datei als eine Mappe mit Makros speichern muss. Richtig? Dann würde ich das tun. Und dann wenn ich das gespeichert habe, müsste ich die Makros (-> "Inhalt aktivieren") jedes Mal, wenn ich die Datei öffne anklicken, oder? und dann habe ich das, was ich will. Bitte helft mir, ich verzweifle so langsam...
5 Antworten
Ja, du musst beim ersten Speichern und bei jedem Öffnen bestätigen, dass du Makros zulassen willst.
Das beste wäre wohl, den Wert in Spalte H einzutragen, wenn Spalte G geändert wird.
Dazu:
Codeseite der betreffenden Tabelle öffnen (z. B. Doppelklick auf die Tabelle im linken Teilfenster der Excel-VBA-Entwicklungsumgebung)
In der linken Dropdown-Liste am oberen Rand (hier sollte "Allgemein" stehen) "Worksheet" auswählen
In der rechten Dropdown-Liste am oberen Rand "Change" wählen
Prüfen, ob Target (der aktuell geänderte Bereich) eine Zelle aus Spalte "G" enthält:
If (Target.Column <= 7) And (7 <= Target.Column + Target.Columns.Count - 1) Then
' Code für die Auswertung von Spalte G
End If
Darin alle Zeilen von Spalte G durchgehen:
Dim zeile As Long
For zeile = Target.Row To Target.Row + Target.Rows - 1
'Prüfe, ob Spalte G auf "erledigt" steht und ob Spalte H noch nicht ausgefüllt worden ist
If (Me.Cells(zeile, 7) = "erledigt") And (Me.Cells(zeile, 7).Value = "") Then
Me.Cells(zeile, 8) = Int(Now()) 'Int auf einen Zeitpunkt angewendet ergibt den Tag ohne Uhrzeit
End If
Next
Es gibt natürlich noch weitere Verfeinerungen, insbesondere für den Fall, dass Target aus mehreren nichtzusammenhängenden Zellblöcken besteht (kriegt man mit Strg + Maus über Tabelle ziehen hin)
Hallo du :),
falls es dich interessiert:
in LibreOffice Calc gibt es eine elegante Lösung ein generiertes Datum zu fixieren :) Excel sagt da leider gleich "Achtung Zirkelbezug"
Ich würde es trotzdem gerne erklären :p
Du benötigst dafür eine Hilfsspalte:
In B2 schreibst du jetzt mal folgende Formel:
=WENN(A2="";"";WENN(ZELLE("TYPE";B2)="v";B2;HEUTE()))
So, in A2 schreibst du jetzt das hier:
=WENN(A4="erledigt";"x";"")
Fertig =)
Wenn du jetzt in A4 "erledigt" eintippst, wird das aktuelle Datum angezeigt, welches sich auch beim Umstellen vom Datum nicht verändert :)
Das kannst du testen, indem du einmal in C2 folgende Formel schreibst:
=HEUTE()
und jetzt das Datum des Computers einmal einen Tag vor oder zurück stellst und das Dokument aktualisiert :)
Vll hat auch einer der Experten (Suboptimierer Oubyi ...) eine Idee wie man das in Excel umsetzen kann?:p
Liebe Grüße,
iMPerFekTioN
Das geht in xl nur, wenn Berechnen: iterative Berechnung eingestellt ist. Da aber das eine Anwendungs- und keine Datei-Option ist (obwohl es unter Datei-Optionen steht) lässt sich das nicht auf Dauer durchhalten. (ausserdem hat Type = "v" in xl einen anderen Buchstaben, weiß aber ohne Nachschlagen nicht mehr, welchen)
Hallo iMPerFekTioN
Nach langen probieren habe ich deine Formel noch vereinfacht Ich weiß zwar nicht, wieso die funktioniert. Sie funktioniert bei LO und Excel
=WENN(A2="";"";WENN(ZELLE("TYP")="";"";HEUTE()))
ich hab die Methode in xl mal in www.gutefrage.net/frage/excel-wert-durch-bedingung-unveraenderbar-machen
verwendet, ist mir aber zu mühsam, das nochmals nachzuvollziehen, weil man da eben ...-Berechnung-Iteration einstellen muss, was ich bei normalem Arbeiten nicht brauchen kann.
In OO/LO: http://de.openoffice.info/viewtopic.php?f=25&t=56497
Übrigens ist zur Kontrolle die Jetzt() - Funktion besser geeignet als heute(), da braucht man kein Datum umstellen, die ändert sich von selbst schnell genug (oder eben nicht).
Hallo IMPerFekTioN,
deine Formeln funktionieren auch in allen Excelversionen (2003, 2010, 2016) Nur müssen die Zellen als Datum formatiert werden!
Leider habe ich deine Formel
=WENN(A2="";"";WENN(ZELLE("TYPE";B2)="v";B2;HEUTE()))
nicht verstanden Vielleicht kannst du die erklären.
Danke
Wenn in einer Spalte das Datum abgeleitet von JETZT() oder HEUTE() steht, so klicke in diese Zelle. Drücke F2 + F9 + Enter oder Klicke doppelt in diese Zelle F9 + Enter
Machs andersrum: Das heutige Datum kannst Du mit Strg+. (Punkt) fix erzeugen (die Uhrzeit mit Strg+: (kann man auch -vorzugsweise mit Leerzeichen dazwischen- aneinanderhängen oder in beliebige Texte einfügen)
Dann bzw. vorher in die Zelle(n), wo erledigt stehen soll, die Formel:
=Wenn(zugehörigeDatumszelle>1;"erledigt":"noch offen") oder eine andere passende Funktion.
Geht ganz ohne Makro!
nochmals zur Präzisierung: die Wenn-Formel kannst Du für alle betroffenen Zellen schon mal vorlegen, sie zeigt erst dann erledigt, wenn ein Datum(oder eine Zahl) in der korrespondierenden Zelle gesetzt wird!
Mit einer kleinen Modifikation könnte dann auch ein Text in der Datumszelle stehen mit i'einem Hinweis, zB "bis 1.3. fertigzustellen".
=WENN(WENNFEHLER(--zugehörigeDatumszelle;0)>42736;"erledigt";"noch offen")
42736 ist =1*"1.1.17", so dass kleinere Zahlen/Datümer sogar ignoriert würden (ob das noch Sinn macht, sei mal dahingestellt), in jedem Fall aber Texte.
EDIT: Muss ich nochmal anschauen, VBA is doch nicht so einfach (Programmzeilen folgen)
Hmmm:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 15 Then
If Target.Value = "Erledigt" Or Target.Value = "erledigt" Then
Target.Offset(0, -2).Value = Date
End If
End Sub
Fast!
So ist es imho besser:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 7 Then
If Target.Value = "erledigt" Then
Target.Offset(0, 1).Value = Date
End If
End If
End Sub
Puh, ok. Ich hoffe eine der angebotenen Varianten hat dem Fragesteller geholfen.
Klar, G ist Column 7 *facepalm*
halte das Makro auch für besser als die ansonsten angesprochenen Formellösungen mit Klimmzügen.
Vllt noch: Das Makro (am besten das von Oubyi) gehört in das Modul des betroffenen Arbeitsblattes und funktioniert dann auch nur in diesem!
Der Nachteil ist eben, dass die Datei dann als .xlsm (oder altes .xls-Format) gespeichert werden m,uss und dann ständig nervige Warnungen kommen über die RIIIEEESENGEFAHREN von Makros!
Hallo, also diesen Text:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 7 Then
If Target.Value = "erledigt" Then
Target.Offset(0, 1).Value = Date
End If
End If
End Sub
exakt so in den Code kopieren und als excel datei mit makros speichern? dann soll es funktionieren? oder soll ich noch was verändern? oder wirklich genau so lassen?
"Verfeinerungen" auch das:
anstatt Int(Now()) also kürzer Date
Aber das Me hab ich noch nicht ganz gefressen...Muss ich rumprobieren!