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;"")
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 )
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]C1Zu 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
Beiträge aus dem Excel-Forum zum Thema "Datum abfragen und Werte kopieren"