Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
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

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige