Registriert seit: 08.02.2017
Version(en): 2016
20.04.2023, 10:02
(Dieser Beitrag wurde zuletzt bearbeitet: 20.04.2023, 10:38 von dertommy.)
Hallo!
Ich lasse mir eine Liste von Namen inkl. Datums in einer MsgBox anzeigen.
Nachdem die Liste zulange ist und mir deshalb nicht alle Werte in der MsgBox angezeigt werden, würde es mir auch reichen, wenn nur die Namen inkl. Datum der letzten 2 Jahre (immer ab dem heutigen Datum) angezeigt werden.
Das Datum steht in der Spalte C:C.
Hier einmal mein bestehender Code:
Code: Sub nichtausgezahlteAuszahlungenindenletzten24Monaten()
With ThisWorkbook.Worksheets("Auszahlungen")
Dim rng As Range, strg As String
For Each rng In Range("A:A")
If rng.Value <> "" And rng.Offset(0, 6).Value = "" Then strg = strg & vbLf & rng.Value & ": " & Format(rng.Offset(0, 2).Value, "DD.MM.YYYY")
Next
MsgBox "alle fehlenden Auszahlungen " & String(1, vbNewLine) & _
"inkl. Beantragungsdatum:" & String(2, vbNewLine) & _
strg
End With
End Sub
Ich hoffe, dass mir jemand helfen kann.
LG
Thomas
Excel Version 2016
Registriert seit: 28.08.2022
Version(en): 365
Hi,
(20.04.2023, 10:02)dertommy schrieb: Das Datum steht in der Spalte G:G.
...
Code: ...
If rng.Value <> "" And rng.Offset(0, 6).Value = "" Then strg = strg & vbLf & rng.Value & ": " & Format(rng.Offset(0, 2).Value, "DD.MM.YYYY")
...
Ich behaupte mal, dass das Datum in Spalte C steht. Ansonsten macht dein Code keinen Sinn.
Code: ...
If rng <> "" And rng.Offset(0, 6) = "" And rng.Offset(0,2) > (Date-730) And rng.Offset(0,2) <= Date Then _
strg = strg & vbLf & rng & ": " & Format(rng.Offset(0, 2), "DD.MM.YYYY")
...
Aber so ganz nebenbei gesagt: Was bringt dir die MsgBox? Damit kann man doch nicht wirklich arbeiten. Ich würde hier den Autofilter bevorzugen. Dann kann man nämlich die Namen und Daten bequem kopieren und wieder irgendwo einfügen um z.B. Überweisungen zu tätigen.
Gruß,
Helmut
Win10 - Office365 / MacOS - Office365
Registriert seit: 08.02.2017
Version(en): 2016
20.04.2023, 10:37
(Dieser Beitrag wurde zuletzt bearbeitet: 20.04.2023, 10:39 von dertommy.)
Danke sehr, du hast mir sehr geholfen.
Ja, tut mir leid, das Datum zur Überprüfung steht in der Spalte C. Ich habe es oben in meinem ersten Beitrag soeben ausgebessert.
Mir gefällt einfach eine Msgbox besser.
Excel Version 2016
Registriert seit: 08.02.2017
Version(en): 2016
26.04.2023, 11:30
(Dieser Beitrag wurde zuletzt bearbeitet: 26.04.2023, 11:40 von dertommy.)
Hallo!
Ich möchte dieses Thema nochmals aufgreifen, weil ich noch ein Problem habe. Ich möchte mir nun zusätzlich die Anzahl anzeigen lassen. Leider wird in der MsgBox immer 0 bei der Anzahl angezeigt, hier mein aktueller Code:
Code: Sub nichtausgezahlteAuszahlungenindenletzten24Monaten()
With ThisWorkbook.Worksheets("Auszahlungen")
Dim rng As Range, strg As String
Set adr1 = Worksheets("Auszahlungen").Range("G:G")
Set adr2 = Worksheets("Auszahlungen").Range("C:C")
Anz = Application.WorksheetFunction.CountIfs(adr1, "", _
adr2, "> (Date - 730)", _
adr2, "<= Date")
For Each rng In Range("A:A")
If rng <> "" And rng.Offset(0, 6) = "" And rng.Offset(0, 2) > (Date - 730) And rng.Offset(0, 2) <= Date Then _
strg = strg & vbLf & rng & ": " & Format(rng.Offset(0, 2), "DD.MM.YYYY") & ": € " & Format(rng.Offset(0, 3), "#,##0.00")
Next
MsgBox Anz & " fehlende Auszahlungen in den letzten 2 Jahren:" & String(2, vbNewLine) & _
strg
End With
End Sub
Ich hoffe, dass mir jemand weiter helfen kann.
LG
Thomas
Excel Version 2016
Registriert seit: 28.08.2022
Version(en): 365
26.04.2023, 12:22
(Dieser Beitrag wurde zuletzt bearbeitet: 26.04.2023, 12:24 von HKindler.)
Hi,
da Date ein VBA-Befehl ist, solltest du den außerhalb der "-Zeichen verwenden. Es sei denn du willst die Buchstaben "Date" wirklich da stehen haben (was allerdings keinerlei Sinn macht).
EDIT:
Außerdem solltest du dir angwöhnen sämtliche Variablen zu deklarieren. Dazu am besten Option Explicit am Anfang jedes Moduls einfügen.
Gruß,
Helmut
Win10 - Office365 / MacOS - Office365
Registriert seit: 08.02.2017
Version(en): 2016
Hallo!
Danke für den Hinweis, ich bekomme es aber leider nicht zusammen sondern nur einen Syntaxfehler.
Hier mein Code:
Code: Anz = Application.WorksheetFunction.CountIfs(adr1, "", _
adr2, ">" (Date - 730), _
adr2, "<=" Date)
Irgendetwas mache ich noch falsch. Ich hoffe, dass mir jemand helfen kann.
Excel Version 2016
Registriert seit: 28.08.2022
Version(en): 365
Hi,
irgendwie scheinst du nie etwas zu lernen. Zur Erinnerung: Wenn du Strings aus mehreren Teilen zusammensetzen willst, darfst du die nicht einfach hintereinander knallen, sondern du musst einen bestimmten Operator zwischen die Teile setzen. Welchen? Denk nach, oder bemühe zur Not die externe Kapazitätserweiterungen namens WWW.
Gruß,
Helmut
Win10 - Office365 / MacOS - Office365
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
(20.04.2023, 10:37)dertommy schrieb: Mir gefällt einfach eine Msgbox besser.
Stimmt!
Die kann man ja prima abtippen!
Natürlich nur, wenn Excel nicht den ganzen Bildschirm einnimmt.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 26.09.2022
Version(en): 2019
(26.04.2023, 14:31)RPP63 schrieb: Natürlich nur, wenn Excel nicht den ganzen Bildschirm einnimmt.
...und jemand die Programmlogik entwickelt und C&P-ready bereitstellt.
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
27.04.2023, 06:22
(Dieser Beitrag wurde zuletzt bearbeitet: 27.04.2023, 06:22 von RPP63.)
Um mal auf den Vorschlag von Helmut zurück zu kommen.
VBA iVm einer MsgBox ist hier mehr als fragwürdig.
So etwas regelt man mit dem Autofilter.
Ausgangsposition:
Unsortierte Daten in Spalte C
Die letzten 2 Jahre werden mittels bedingter Formatierung hervorgehoben =($C2>EDATUM(HEUTE();-24)*($G2="")
| A | C | G | 1 | # | Datum | erledigt | 2 | 1 | 01.04.2023 | | 3 | 2 | 26.03.2020 | XXX | 4 | 3 | 24.04.2022 | | 5 | 4 | 17.05.2021 | | 6 | 5 | 23.03.2021 | | 7 | 6 | 27.05.2022 | | 8 | 7 | 12.11.2022 | XXX | 9 | 8 | 11.06.2020 | | 10 | 9 | 21.01.2021 | XXX | 11 | 10 | 06.10.2021 | XXX | 12 | 11 | 09.10.2020 | | 13 | 12 | 13.12.2021 | | 14 | 13 | 19.11.2022 | | 15 | 14 | 24.02.2023 | XXX | 16 | 15 | 22.06.2021 | | 17 | 16 | 30.03.2022 | | 18 | 17 | 28.05.2020 | | 19 | 18 | 05.01.2022 | | 20 | 19 | 27.12.2022 | XXX | 21 | 20 | 02.08.2020 | |
Zelle | bedingte Formatierung... | Format | A2 | 1: ($C2>EDATUM(HEUTE();-24))*($G2="") | abc |
Jetzt sortiere ich Spalte C absteigend und filtere auf die Farbe der bed. Form.:
| A | C | G | 1 | # | Datum | erledigt | 2 | 1 | 01.04.2023 | | 5 | 13 | 19.11.2022 | | 7 | 6 | 27.05.2022 | | 8 | 3 | 24.04.2022 | | 9 | 16 | 30.03.2022 | | 10 | 18 | 05.01.2022 | | 11 | 12 | 13.12.2021 | | 13 | 15 | 22.06.2021 | | 14 | 4 | 17.05.2021 | |
Wenn es denn unbedingt VBA sein muss, kann man sich diese Schritte per Makrorekorder aufzeichnen.
In einem aktuellen Excel kann man das auch per Formel erschlagen:
Nur in I2 steht
| I | J | 1 | # | Datum | 2 | 1 | 01.04.2023 | 3 | 13 | 19.11.2022 | 4 | 6 | 27.05.2022 | 5 | 3 | 24.04.2022 | 6 | 16 | 30.03.2022 | 7 | 18 | 05.01.2022 | 8 | 12 | 13.12.2021 | 9 | 15 | 22.06.2021 | 10 | 4 | 17.05.2021 |
Zelle | Formel | I2 | =SPALTENWAHL(SORTIEREN(FILTER(A2:G21;(C2:C21>EDATUM(HEUTE();-24))*(G2:G21=""));3;-1);1;3) |
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
|