Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1808to1812
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ermitteln des Vormonats mittels VBA

Ermitteln des Vormonats mittels VBA
31.01.2021 14:46:48
Gerald
Folgendes Problem:
Jeden Monat immer zwischen dem 3. Und 9. Des Monats wird der aktuelle Bericht des Vormonats erstellt.
Dieser Bericht benötigt Daten die in Unterordner nach Jahr archiviert sind ( z. B. 2021 2020 2019 2018).
Beispiel: Anfang Februar 2021 soll jetzt der Bericht für Januar 2021 erstellt werden.
Das Makro muss also auf dem Datenlaufwerk in den Ordner 2021 schauen und dort die Datei suchen mit dem Namen „2021_01_Januar.xlsx“.
Die Datendateien fangen immer mit dem Jahr, gefolgt vom Monat an. Dahinter kann es auch schon mal andere Namen geben. Deswegen arbeite ich mit dem Platzhalter *
Wenn die Datei gefunden wurde, wird sie in den Ordner wo das Exceltool liegt kopiert und umbenannt in „DatenAktuell.xlsx“.
Zum vergleich für die Auswertung des Vormonats wird aber auch nach der des Vormonats vor einem Jahr gesucht. In diesem Fall im Ordner 2020 die Datei „2020_01_Januar.xlsx“.
Diese Zahlen werden nachher gegenübergestellt zum Vergleich.
Momentan mache ich das über einen Weg der bestimmt nicht sehr elegant ist und hoffe hier Hilfe zu bekommen.
Beispiel zu Ermittlung des Jahres des Vormonats:

  • strPfad1 = "E:\EXCEL_TEST\010_KPIs\" 'Quelle
    strPfad1 = strPfad1 & Format(Date - 28, "yyyy") & "\"
    sFileAktuell = Dir(strPfad1 & Format(Date - 28, "yyyy_mm") & "*.xlsx") 'Datei suchen
    If Dir(strPfad1 & Format(Date - 28, "yyyy_mm") & "*.xlsx") "" Then
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.copyfile strPfad1 & sFileAktuell, strPfad2, True
    Name ThisWorkbook.Path & "\Daten\" & sFileAktuell As ThisWorkbook.Path & "\Daten\ DatenAktuell.xlsx"
    Else
    MsgBox "Aktuelle Daten sind nicht im Ordner vorhanden. Bitte prüfen."
    Exit Sub
    End If
    'Beispiel zu Ermittlung des Jahres des Vormonats des Vorjahres:
    strPfad1 = "E:\EXCEL_TEST\010_KPIs\" 'Quelle
    strPfad1 = strPfad1 & Format(Date - 393, "yyyy") & "\"
    sFileAktuell = Dir(strPfad1 & Format(Date - 393, "yyyy_mm") & "*.xlsx") 'Datei suchen
    If Dir(strPfad1 & Format(Date - 393, "yyyy_mm") & "*.xlsx") "" Then
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.copyfile strPfad1 & sFileAktuell, strPfad2, True
    Name ThisWorkbook.Path & "\Daten\" & sFileAktuell As ThisWorkbook.Path & "\Daten\ DatenAktuell.xlsx"
    Else
    MsgBox "Aktuelle Daten sind nicht im Ordner vorhanden. Bitte prüfen."
    Exit Sub
    End If

  • Wie ihr seht rechne ich beim Vormonat einfach 28 Tage vom aktuellen Datum runter um irgendwo im Vormonat zu sein.
    Das gleiche für den Monat vor einem Jahr, wo ich 393 Tage zurück rechne.
    Geht das nicht auch einfacher?
    Gruß
    Gerald

    13
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Ermitteln des Vormonats mittels VBA
    31.01.2021 15:33:02
    MatthiasG
    Hallo Gerald,
    Schau dir mal die Funktion DateSerial() an.
    Damit kannst du Monate oder Jahre abziehen, auch wenn "eigentlich" eine Null kein gültiger Wert fürs Datum ist:
    Sinngemäß:
    
    Vormonat = DateSerial(aktJahr, aktMonat - 1, 1)
    Vorjahr = DateSerial(aktJahr - 1, aktMonat, 1)
    
    Gruß Matthias
    AW: Ermitteln des Vormonats mittels VBA
    31.01.2021 16:36:54
    Gerald
    Ich habe das gerade mal probiert mit
    vormonat = DateSerial(jahr, monat - 1, 1)
    Als Ergebnis bekomme ich aber den 01.11.1999
    Wo ist mein Fehler?
    Gruß Gerald
    AW: Ermitteln des Vormonats mittels VBA
    31.01.2021 18:29:46
    Gerald
    Ich glaube jetzt habe ich es:
  • Sub testneu()
    Dim vormonat As Date
    Dim vormonatALT As Date
    vormonat = DateSerial(Year(Date), Month(Date), -1)
    vormonatALT = DateSerial(Year(Date) - 1, Month(Date), -1)
    MsgBox "Vormonat des laufenden Jahres: " & vormonat
    MsgBox "Vormonat des Vorjahres: " & vormonatALT
    End Sub
    

  • Was ich nicht hinbekomme ist das Format.
    Ich benötige ja erst einmal die Jahreszahl für den Ordner, welche ich dann an den Pfad anhänge.
    Format(Date - 393, "yyyy") & "\"
    Und natürlich bei der 2. Abfrage zur File suche im Ordner die Jahreszahl und den Monat
    Format(Date - 393, "yyyy_mm") & "*.xlsx")
    Wie setze ich das bei DateSerial um?
    Gruß Gerald
    Anzeige
    Format(DateSerial(....), "yyyy_mmm")
    31.01.2021 18:32:17
    ralf_b
    AW: Format(DateSerial(....), "yyyy_mmm")
    31.01.2021 18:38:52
    Gerald
    mmmh, ich habe das jetzt so abgeändert, um die Jahreszahl rauszubekommen
    Format(DateSerial(Year(Date), Month(Date), -1), "yyyy")
    Nun bekomme ich als Ergebnis aber den 12.07.1905 angezeigt
    bei mir 2020
    31.01.2021 18:47:35
    ralf_b
    teste mal....
    31.01.2021 18:52:53
    ralf_b
    probier mal das
    MsgBox Date & vbCrLf & "Year:" & Year(Date) & vbCrLf & "Month:" & Month(Date)
    

    AW: teste mal....
    31.01.2021 19:15:35
    Gerald
    Das Ergebnis ist der 31.01.2021
    Year 2021
    Month 1
    Dann könnte ich sogar mit der Funktion
    Year(Date) - 1
    schonmal das Vorjahr ermitteln, aber wenn ich von heute den 31.01.2021 ausgehe
    wollte ich ja den Vormonat des Vorjahres ermitteln.
    Also 12.2019
    Anzeige
    AW: teste mal....
    31.01.2021 23:19:07
    ralf_b
    du solltest den Vorschlag mit Dateserial(Year(date), Month(date) -1 ,1) nehmen.
    12.2019 ist ein Jahr zu weit nach hinten, oder?
    AW: teste mal....
    31.01.2021 23:19:09
    ralf_b
    du solltest den Vorschlag mit Dateserial(Year(date), Month(date) -1 ,1) nehmen.
    12.2019 ist ein Jahr zu weit nach hinten, oder?
    AW: Ermitteln des Vormonats mittels VBA
    31.01.2021 18:30:10
    ralf_b
    prüfe die Werte in jahr und monat, sollten Integer Zahlen sein.
    aktuelle ist da der Wert 0 drin.
    AW: Vormonat des Vorjahres mittels VBA
    31.01.2021 20:39:13
    GerdL
    Moin Gerald!
    MsgBox Format(DateSerial(Year(Date) - 1, Month(Date), 0), "yyyy_mm")
    

    Gruß Gerd
    AW: Vormonat des Vorjahres mittels VBA
    31.01.2021 22:05:31
    Gerald
    Super Danke, funktioniert einwandfrei

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige