Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datumsvergleich VBA

Forumthread: Datumsvergleich VBA

Datumsvergleich VBA
22.02.2023 13:02:44
Chris
Hallo liebe Community,
ich habe beim Datumsvergleich zwischen einem PivotItem und dem systembasierten Datum das Problem, dass amerikanisches und europäisches Format miteinander verglichen werden.
Da ich nur Daten des aktuellen Monats sehen möchte, kommt es hier zu Fehlern.
Z.B. wird im folgenden Vergleich (siehe Code) der 02.01.2023 als 'true' markiert, da die amerikanische Schreibweise "1/2/2023" lautet und Excel das bei der Month-Funktion als Februar interpretiert.
Kann mir jemand sagen, wie ich was am besten konvertieren muss, damit ich die gleiche Vergleichsbasis habe? Leider konnte mir google in diesem Fall nicht weiterhelfen.
Vielen Dank vorab!
Chris

   Dim PvI As PivotItem
    Dim Datum As String
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Buchungs-tag").EnableMultiplePageItems = True
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Buchungs-tag").ClearAllFilters
    For Each PvI In ActiveSheet.PivotTables("PivotTable1").PivotFields("Buchungs-tag").PivotItems
        If IsDate(PvI) Then
          Debug.Print PvI
          If Month(PvI) = Month(Now) And Year(PvI) = Year(Now) Then
          PvI.Visible = True
          Else: PvI.Visible = False
          End If
        End If
    Next

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datumsvergleich VBA
22.02.2023 17:13:31
Yal
Hallo Chris,
es liegt daran, dass IsDate aus "1/2/2023" den 1. Februar erkennt, und somit aus "1/13/2023" kein gültiges Datum (Monat > 12?) erzeugen kann. Die Daten, die Du siehst, sind wahrscheinlich alle falsch.
Ich glaube, Du bekommst das Problem aus dem Weg erst, wenn Du die Daten (pl. v. Datum) in einem DE-Format bringst.
Je nachdem woher deine Daten kommen, kann es im Ladevorgang über Power Query, in VBA über Workbook.OpenText oder in einem Nachbehandlung in Excel.
Da die Behandlung per Formel etwas sperrig ist (erkennen, wo die "/" sind, dementsprechend teilen und wiederzusammekleben) tendiere zu einer UDF (User Defined Function), die man entweder wie eine Formel in Excel verwenden kann (Ergebnis in einer separaten Zelle, was zur Prüfung gut ist) oder per VBA über die gesamte Spalte (ersetzt Ursprungsdaten) einmalig anwenden kann.
In einem allgemeine Modul:
Public Function US2DE_Date(ByVal Target As Range)
Dim Arr
    Set Target = Target.Cells(1) 'wenn mehrere Zelle nur die erste
    Arr = VBA.Split(Target.Value, "/")
    If UBound(Arr) = 2 Then
        US2DE_Date = DateSerial(Arr(2), Arr(0), Arr(1))
    Else
        'US2DE_Date = Err 'Alternativ 1: gibt Fehler zurück
        US2DE_Date = Target 'Alternativ 2: gibt unveränderte Wert zurück
    End If
End Function
dann kannst Du in Excel als Formel
= US2DE_Date(A1)
und anschliessend die Zelle als Datum formatieren
Oder zusätzlich mit:
Sub US2DE_Datum_konvertieren()
Dim Z As Range
    For Each Z In Selection
        Z.Value = US2DE_Date(Z)
        If IsDate(Z.Value) Then Z.NumberFormat = "DD.MM.YYYY"
    Next
End Sub
Die gesamte markierte Bereich wird ersetzt, falls etwas in a/b/c bevorsteht, bei 1&lt:a<12 und 1<b<28, 29, 30 oder 31 (abhängig von a und c)
Erst wenn das Feld sauber als Datum erkannt wird, kann automatisch eine Gruppierung nach Jahr und Monat erfolgen. Dann akt. Jahr und akt. Monat im "Filter" reinbringen.
VG
Yal
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige