Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Makro - Kopieren von Feldinhalten abhängig von zugehörigem Datum





Frage

Hallo, ich habe in einer Spalte (z.B. A) Datumsangaben und in der nächsten Spalte (B) zugehörige Werte mittels SVERWEIS stehen. Jetzt möchte ich per Makro alle Formeln (B), deren Datum in der Vergangenheit liegt in Werte kopieren (entweder in die gleiche Zelle (B) oder in die Spalte rechts davon). Kann mir dazu jemand den code liefern? Ich weiß nicht mehr weiter. Vielen Dank schon mal. Gruß Jojo

Antwort 1 von fedjo

Hallo Jojo,
versuch mal mit der Formel in Spalte C

=WENN(HEUTE()>=A1;WERT(B1);"")

Gruß
fedjo

Antwort 2 von jojow

Danke für die Antwort - leider klappt es so nicht. Denn es handelt sich nach wie vor um eine Formel. Und wenn sich die Vergangenheitswerte ändern, ändert sich auch das Resultat, das ich als Werte in der 3. Spalte erwarte. Ich brauche die Zahlen der Vergangenheit ausschließlich noch als Werte - deshalb denke ich, dass es nur über ein Makro geht. D.h. ich müsste den entsprechenden Bereich in einer Schleife durchlaufen und jedes Mal prüfen, ob ein Datum in der Vergangenheit liegt. Falls ja, wird der Inhalt als Wert eine Spalte weiter kopiert. Klingt einfach, aber wie sieht der code aus?

Gruß
Jojo

Antwort 3 von fedjo

Hallo Jojo,
kopier den Code in ein Modul.
Das Datum wird in Spalte A geprüft, der Wert aus Spalte B wird dann in Spalte C eingefügt.

Gruß
fedjo

Sub Datum_prüfen()
intLastRow = Cells(Rows.Count, 1).End(xlUp).Row
For intCounter = intLastRow To 1 Step -1
If Not IsEmpty(Cells(intCounter, 1)) And _
CDbl(Cells(intCounter, 1).Value) < CDbl(Date) Then

Range("B" & intCounter).Copy
Range("C" & intCounter).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

End If
Next intCounter
End Sub

Antwort 4 von jojow

Hallo,

vielen Dank. Das sieht schon mal super aus. Ein Problem hab' ich jedoch noch nicht bedacht. Die Operation wird jetzt immer gemacht, wenn das Datum in der Vergangenheit liegt. Das führt leider dazu, dass auch die (mittels der Formel) nachträglich veränderten Werte in Spalte B bei jedem Mal wieder als Werte in Spalte C "überklatscht" werden. Das darf natürlich nicht sein. D.h. bereits einmal als Werte kopierte Inhalte dürfen kein 2. Mal nach Spalte C kopiert werden.
Hast Du mir dafür noch eine Ergänzung im Code? Das wäre super!
Vielen Dank, Gruß
Jojo

Antwort 5 von jojow

Hallo - ich nochmal,

ich hab' gerade gesehen, dass irgendwas mit der Datumsprüfung nicht stimmt. Wahrscheinlich liegt es daran, dass meine Datumsangaben im Bereich BE29:BE40 liegen. D.h. die Formeln liegen entsprechend in Spalte BF und die Werte sollen nach Spalte BG kopiert werden.

Gruß und dankeschön
Jojo

Antwort 6 von fedjo

Hallo Jojo,
habe das Makro geändert:
Das Datum wird in Spalte BE geprüft, es sollten aber keine leeren Zellen vorhanden sein.
Wert wird aus BF in BG eingefügt, aber nur wenn die Zelle noch leer ist.


Gruß
fedjo

Sub Datum_prüfen()
intLastRow = Cells(Rows.Count, 57).End(xlUp).Row
For intCounter = intLastRow To 1 Step -1
If Not IsEmpty(Cells(intCounter, 1)) And _
CDbl(Cells(intCounter, 1).Value) < CDbl(Date) And Range("BG" & intCounter) = "" Then

Range("BF" & intCounter).Copy
Range("BG" & intCounter).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

End If
Next intCounter
End Sub

Antwort 7 von jojow

Hallo fedjo,

vielen Dank - nach einer kleineren Änderung funktioniert es jetzt:
Mit "... CDbl(Cells(intCounter, 1).Value) < CDbl(Date) ..." ging es nicht - da wurde einfach alles kopiert. Ich hab' noch etwas gesucht und diesen Teil dann durch "... Cells(intCounter, 1) < Date ..." ersetzt. So geht's.

Viiiiiielen Dank nochmal - bin begeistert
Gruß
Jojo

Antwort 8 von jojow

Oh Mist - ich hab' mich zu früh gefreut :-((
Auch meine Version funktioniert nicht. Der Datumsvergleich klappt einfach nicht. Die Prüfung auf leere Zellen ist ok, aber mit dem Datum hapert's. Vielleicht kannst Du mir doch nochmal helfen?
Danke, Gruß
Jojo

Antwort 9 von fedjo

Hi Jojo,
versuchs mal mit diesem Code:

Gruß
fedjo

Sub Datum_prüfen()
Dim iCounter As Integer, iRow As Integer
iRow = Cells(Rows.Count, 57).End(xlUp).Row
For iCounter = iRow To 1 Step -1
If Cells(iCounter, 57) And CDbl(Cells(iCounter, 57).Value) < CDbl(Date) And Range("BG" & iCounter) = "" Then
Range("BF" & iCounter).Copy
Range("BG" & iCounter).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End If
Next iCounter
End Sub

Antwort 10 von jojow

Hallo fedjo,

vielen Dank für Deine Mühe! Ich hab' jetzt die ganze Logik, wann die Werte kopiert werden sollen (ist noch umfangreicher als nur ein Datumsvergleich geworden) in einer weiteren "Hilfs-Spalte" in Excel abgelegt und prüfe nur noch auf einen entsprechenden Eintrag in dieser Spalte ab. So funktioniert alles.

Nochmal vielen Dank und einen schönen Abend noch, Gruß
Jojo

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: