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

Forumthread: Datum vergleichen per VBA

Datum vergleichen per VBA
17.02.2005 23:34:29
Franz
Hallo Fachleute,
kapier was nicht und komm nich t auf den Fehler, hier ein paar (hoffentlich genug) Codeschnipsel:
Dim rng As Range
If rng &gt Date Then
MsgBox rng & " &gt " & Date
End if
Damit kommt z.B. 01.01.2005 &gt 17.02.2005
Hab's auch schon mit verschiedenen anderen Schreibweisen versucht, wie:
If CDbl(rng) &gt CDbl(Date) Then
ändert aber auch nix.
Wie muss ich denn das bitte schreiben?
Vielen Dank für eure Hilfe im Voraus und Grüße
Franz
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum vergleichen per VBA
K.Rola
Hallo,
rng hat in deinem Schnipsel keinerlei Zuordnung?
Gruß K.Rola
AW: Datum vergleichen per VBA
17.02.2005 23:48:33
Franz
Hallo K.Rola,
hier ein bisschen genauer:

Private Sub aktGeb()
Dim n As Integer
Dim rng As Range
Dim strText As String
Dim blnFound As Boolean
strText = Chr(13) & "Geburtstage in den nächsten 14 Tagen:" & vbLf & vbLf & "Datum" & _
vbTab & vbTab & vbTab & "Name" & vbLf & vbLf
For Each rng In Sheets("Daten").Range("AW4:AW1500")
If IsDate(rng) Then
If rng > Range("AW3") Then
MsgBox rng & "  >  " & Date
'If DateDiff("d", Date, DateSerial(Year(Date), _
Month(rng), Day(rng)), vbMonday) < 14 Then
blnFound = True
strText = strText & Format(rng, "ddd,") & vbTab & Format(rng, "dd.  mmmm") & vbTab & _
rng.Offset(0, -45) & "  " & rng.Offset(0, -46) & "               " & vbLf
'End If
End If
End If
Next
If blnFound Then
MsgBox strText & vbLf & vbLf, 48, "       Anstehende Geburtstage"
End If
End Sub

Die Datümer in der Spalte "AW" haben das Format "TT.MM.JJJJ"
Grüße
Franz
Anzeige
AW: Datum vergleichen per VBA
K.Rola
Hallo,
If CDate(rng) &gt CDate([AW3])
solte eigentlich klappen.
Gruß K.Rola
Ja!!
18.02.2005 00:07:25
Franz
Hallo K.Rola,
ja, das geht, vielen Dank! Und jetzt geht auch
If CDate(rng) &gt CDate(Date)
obwohl ich damit vorher auch probiert habe, hab mich wohl irgnedwie vertippt.....
Nochmals danke und Grüße
Franz
Anzeige
AW: Datum vergleichen per VBA
PeterW
Hallo Franz,
was soll rng denn sein? So geht es ohne Probleme:

Sub Datumsvergleich()
Dim rng As Range
For Each rng In Range("A1:A50")
If rng > Date Then
MsgBox rng & " > " & Date
End If
Next
End Sub

Gruß
Peter
AW: Datum vergleichen per VBA
17.02.2005 23:49:49
Franz
Hallo Peter,
genau so hab ich's, in meiner ANtwort an K.Rola hab ich den ganzen Code gepostet.
Danke und Grüße
Franz
Anzeige
AW: Datum vergleichen per VBA
PeterW
Hallo Franz,
auf welchem Blatt steht AW3?
Gruß
Peter
AW: Datum vergleichen per VBA
17.02.2005 23:59:11
Franz
Hallo Peter,
im selben Blatt "Daten" = aktives Blatt, das "Sheets("Daten")." kann im Grunde raus, ist von vorher übriggeblieben.
Grüße
Franz
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Datum vergleichen per VBA in Excel


Schritt-für-Schritt-Anleitung

Um das Datum in Excel per VBA zu vergleichen, kannst Du folgenden Code verwenden. Dieser zeigt, wie Du Datumswerte in einer bestimmten Spalte mit dem aktuellen Datum vergleichen kannst.

  1. Öffne den Visual Basic for Applications (VBA) Editor (Alt + F11).
  2. Erstelle ein neues Modul (Einfügen > Modul).
  3. Füge den folgenden Code ein:
Sub Datumsvergleich()
    Dim rng As Range
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Daten") 'Ändere "Daten" auf deinen Blattnamen

    For Each rng In ws.Range("AW4:AW1500") 'Passe den Bereich nach Bedarf an
        If IsDate(rng) Then
            If CDate(rng) > Date Then
                MsgBox rng & " > " & Date
            End If
        End If
    Next rng
End Sub

Dieser Code durchläuft die Zellen im Bereich "AW4:AW1500" und vergleicht jede Zelle mit dem heutigen Datum. Wenn das Datum größer als heute ist, wird eine Meldung ausgegeben.


Häufige Fehler und Lösungen

  • Fehler: rng hat in deinem Schnipsel keinerlei Zuordnung

    • Lösung: Stelle sicher, dass die Variable rng in einer Schleife über den gewünschten Bereich zugewiesen wird, wie im obigen Code gezeigt.
  • Fehler: Typenkonflikt

    • Lösung: Überprüfe, ob die Zelle, die Du vergleichst, tatsächlich ein Datum enthält. Verwende IsDate(rng) um sicherzustellen, dass die Zelle ein Datum ist.
  • Fehler: Objekt erforderlich

    • Lösung: Achte darauf, dass Du das Arbeitsblatt korrekt referenzierst, z.B. Set ws = ThisWorkbook.Sheets("Daten").

Alternative Methoden

Du kannst auch die DateDiff-Funktion verwenden, um Datumswerte zu vergleichen. Hier ist ein Beispiel:

Sub DatumsvergleichMitDateDiff()
    Dim rng As Range
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Daten")

    For Each rng In ws.Range("AW4:AW1500")
        If IsDate(rng) Then
            If DateDiff("d", Date, CDate(rng)) > 0 Then
                MsgBox rng & " ist nach heute."
            End If
        End If
    Next rng
End Sub

Diese Methode erlaubt es Dir, auch Zeiträume zu vergleichen, indem Du die Differenz in Tagen, Monaten oder Jahren berechnest.


Praktische Beispiele

Angenommen, Du möchtest alle Geburtstage in den nächsten 14 Tagen finden. Hier ist ein Beispiel, das zeigt, wie Du das umsetzen kannst:

Sub NaechsteGeburtstage()
    Dim rng As Range
    Dim strText As String
    Dim blnFound As Boolean
    strText = "Geburtstage in den nächsten 14 Tagen:" & vbCrLf

    For Each rng In ThisWorkbook.Sheets("Daten").Range("AW4:AW1500")
        If IsDate(rng) Then
            If DateDiff("d", Date, CDate(rng)) < 14 And DateDiff("d", Date, CDate(rng)) >= 0 Then
                strText = strText & Format(rng, "dd.mm.yyyy") & vbCrLf
                blnFound = True
            End If
        End If
    Next rng

    If blnFound Then
        MsgBox strText
    Else
        MsgBox "Keine Geburtstage in den nächsten 14 Tagen gefunden."
    End If
End Sub

Tipps für Profis

  • Verwende Option Explicit am Anfang Deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Nutze Debug.Print im Code, um Werte während der Ausführung zu überprüfen, anstatt immer MsgBox zu verwenden.
  • Wenn Du mit großen Datenmengen arbeitest, kann es hilfreich sein, Application.ScreenUpdating = False am Anfang und Application.ScreenUpdating = True am Ende Deines Codes zu setzen, um die Leistung zu verbessern.

FAQ: Häufige Fragen

1. Kann ich den Code auch für Access verwenden? Ja, die grundlegenden Konzepte sind ähnlich, aber Du musst den Code an die Access VBA-Umgebung anpassen.

2. Wie vergleiche ich Datumswerte in Excel mit einem bestimmten Datum? Du kannst den Code so anpassen, dass anstelle von Date ein beliebiges Datum verwendet wird, z.B. CDate("01.01.2023").

3. Was mache ich, wenn die Datumswerte in einer anderen Formatierung vorliegen? Stelle sicher, dass Du die Datumswerte mit CDate oder DateValue in ein Datumsformat umwandelst, das VBA erkennt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige