Herbers Excel-Forum - das Archiv
Datum abfragen und Werte kopieren
Betrifft: Datum abfragen und Werte kopieren
von: Norman
Geschrieben am: 19.09.2019 18:28:20
Hallo zusammen,
meine Wenigkeit hat schon viel Hilfe hier im Forum gefunden. Ihr seid alle Goldwert!
Nun brauche ich aber direkt Hilfe, die Suche hat nichts passendes ergeben, leider.
Ich brauche eine Funktion die einen bestimmten Bereich in einem Arbeitsblatt mit dem Namen „Daten“ absucht. Darin sind verschiedene Namen und Daten (Bsp: 01.01.2019).
Sollte die Suchkriterien erfüllt sein, muss das Datum dann in ein zweites Blatt mit dem Namen „Liste“ kopiert werden.
Das ganze soll so ablaufen:
Prüfen ob Name vorhanden.
Wenn nein: Funktion beenden.
Wenn ja: Prüfen ob ein Datum vorhanden ist.
Wenn kein Datum vorhanden: Ignorieren und nächste Zeile.
Wenn Datum vorhanden: Es mit dem Tagesdatum vergleichen.
Ist die Differenz zum Tagesdatum höher als 30 Tage, soll er es ignorieren und die nächste Zeile prüfen.
Ist die Differenz genau 30 oder niedriger, soll er das Datum auf das Blatt „Liste“ kopieren.
Wie bekomme ich das in eine Funktion mit VBA? Ich danke euch schon vorab von Herzen!
Liebe Grüße,
Norman
Betrifft: AW: Datum abfragen und Werte kopieren
von: 1714026.html
Geschrieben am: 20.09.2019 08:37:26
Hallo Norman,
muss das unbedingt via VBA sein?
Ausgehend davon, dass das Datum in Spalte A und die Namen in Spalte B stehen, reicht in dem Blatt "Liste" folgende Formel:
=WENN(UND(Daten!B1<>"";Daten!A1>HEUTE()-30);Daten!A1;"")
In A1 einfügen und so weit wie nötig nach unten ziehen.
Man könnte diese Formel auch automatisch durch VBA einfügen lassen.
Gruß Pierre
Betrifft: Als VBA
von: 1714041.html
Geschrieben am: 20.09.2019 09:50:57
Hallo Norman,
nochmal ich...
Eine entsprechende VBA-Lösung KÖNNTE so aussehen:
Private Sub worksheet_activate()
Range("A1:A20").Formula = "=IF(AND(Daten!R[0]C2<>"""",Daten!R[0]C1>TODAY()-30),Daten!R[0]C1,"""" _
)"
End Sub
Private Sub Worksheet_Change(ByVal target As Range)
Dim loeschen As Double
For loeschen = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(loeschen, 1).Value = "" Then
Rows(loeschen).Delete
End If
Next loeschen
End Sub
(Anfänger-"Hauptsache-Es-Klappt"-Code :D )
Beide Codes ins Fenster des Tabellenblattes "Liste".
Wenn du zum Blatt Liste wechselst, wird die Formel in A1 bis A20 die Formel geschrieben, die ich oben schon genannt habe und zusätzlich werden die "leeren" Zellen (da wo halt durch die Formel das Datum nicht übernommen wird) aus der Liste gelöscht.
Gruß Pierre
Betrifft: AW: Als VBA
von: 1714067.html
Geschrieben am: 20.09.2019 11:57:30
Hallo Pierre!
vielen vielen herzlichen Dank für deine zwei Lösungen.
Zu deiner Frage: Ja, es muss leider in VBA sein :( Wäre mir auch lieber, wenn es eine normale Formel auch getan hätte :D
Zum VBA-Code:
Ich hatte vergessen zu sagen, das die Daten immer in der Zukunft sind. Sprich, die "Restlaufzeit" bis zum Datum im Blatt "Daten" wichtig ist. 30Tage oder weniger. Da habe ich mich wohl doof ausgedrückt.
Dennoch gibt es ein kleines Problem, was wohl eventuell auf meine "Erklärung" zurückzuführen ist.
Wenn ich den Code im Blatt "Liste" nun ausführen will, kommt folgende Fehlermeldung:
"Fehler beim Kompilieren: Erwartet: Anweisungsende".
Und hier hört mein VBA Wissen direkt auf :D Mache ich was falsch oder hat sich irgendwo ein Fehler eingeschlichen? Habe im Grunde C&P genutzt :/
Die Namen sind in Spalte A und die Daten, die mit dem Tagesdatum verglichen werden sollen, in Spalte B.
Ich entschuldige mich für meine luckenhafte Erklärung.
Und danke dir vorab für deine Mühe bis jetzt!
Liebe Grüße,
Norman
Betrifft: AW: Als VBA
von: 1714075.html
Geschrieben am: 20.09.2019 12:37:53
Hallo Norman,
ich hoffe, ich verstehe dich richtig:
Wenn das Datum in B1 = Tagesdatum bis 30 in der Zukunft (also 19.10.) ist, dann soll das Datum ins Blatt "Liste" übernommen werden?
Dann tausche die ersten Zeilen mal durch folgende aus:
Private Sub worksheet_activate()
Range("A1:A20").Formula = "=IF(AND(Daten!R[0]C2<>"""",Daten!R[0]C1>TODAY()-1,Daten!R[0]C1
Zu deinem Fehler: Möglicherweise ist der entstanden, weil in meinem zitierten Code ein _ von der Forensoftware eingefügt wurde, der da nicht hingehört. Sorry, darauf habe ich dich nicht hingewiesen.
Schreibe die gesamte "IF..." Formel in eine Zeile, so dass auch keine Leerzeichen über bleiben.
Aber ich mache das jetzt ein wenig anders, ich lade dir mal meine Mappe hoch, da kannst du sehen, wie die beiden Codes richtig aussehen müssen. (Die Spalte E in Daten kannst du ignorieren, die habe ich nur benutzt, um die Formel als solche richtig hinzubekommen.)
Hier die Mappe, dann kannst du die Codes wirklich einfach 1:1 kopieren.
https://www.herber.de/bbs/user/132130.xlsm
Gruß Pierre
PS: Sorry, ich neige dazu, alles etwas zuuuu ausführlich zu erklären :D
PPS: Die englische Formelschreibweise habe ich gewählt, weil ich mit der deutschen und FormulaLocal nicht klar kam, da entstanden mir ständig Fehler. So war es jedenfalls einfacher.
Betrifft: jetzt aber wirklich...
von: 1714077.html
Geschrieben am: 20.09.2019 12:48:20
Ach man -.-
tut mir Leid, wieder was vergessen. Du hast ja die Namen/Daten andersrum.
Also:
Der richtige Code jetzt nochmal (diesmal stimmt er auch)
Private Sub worksheet_activate()
Range("A1:A20").Formula = "=IF(AND(Daten!R[0]C1<>"""",Daten!R[0]C2>TODAY()-1,Daten!R[0]C2< _
TODAY()+30),Daten!R[0]C2,"""")"
End Sub
Aber auch hier gilt: Unterstrich löschen und alles, was ich fett markiert habe, muss in einer Zeile stehen ohne Leerzeichen innerhalb des "IF" Teils.
Gruß Pierre