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

Forumthread: Makro: Datum anzeigen das Heute oder "kleiner" ist

Makro: Datum anzeigen das Heute oder "kleiner" ist
onkelbobby
Hallo,
ich habe in einer Tabelle in Spalte J Geburtsdaten.
Mit einem Button sortiere ich die Liste nach Geburtsdatum.
Ich möchte, dass nach der Sortierung das Feld das am nächsten zum heutigen Datum steht markiert wird.
(Also wenn Heute = Geburtstag, dann dieses Feld markieren - wenn keine Übereinstimmung dann das Feld das Datum, das am kürzesten vorüber ist, also eine Zeile vor dem nächstne Geburtstag).
Ist sicher kein großes Ding, ich bekomme das alleine aber nicht hin.
Danke,
Robert
Anzeige
AW: Makro: Datum anzeigen das Heute oder "kleiner" ist
26.04.2010 15:23:30
fcs
Hallo Robert,
in welcher Form hast du denn die Geburtstage in Spalte J eingetragen?
Gruß
Franz
AW: Makro: Datum anzeigen das Heute oder "kleiner" ist
26.04.2010 15:30:31
onkelbobby
Hallo Franz,
TT.MM.JJJJ
AW: Makro: Datum anzeigen das Heute oder "kleiner" ist
26.04.2010 15:54:01
onkelbobby
Ich hab das mit dem heutigen Datum schon selbst hingebracht:
Dim dHeute As Date
Dim i As Integer
dHeute = Date
For i = 1 To [J65000].End(xlUp).Row
If Left(dHeute, 5) = Left(Cells(i, 10), 5) Then
Cells(i, 10).Select
End If
Next i
Jetzt ist nur noch die Frage, wie ich die Zelle vor dem nächsten Geburtstag markiere, wenn heut kein Geburtstag vorliegt?
Ich probiers selbst noch mal, bin aber dankbar für Tips!
Robert
Anzeige
AW: Makro: Datum anzeigen das Heute oder "kleiner" ist
26.04.2010 16:12:43
Rudi
Hallo,
Sub tt()
Dim i As Long
For i = 1 To Cells(Rows.Count, 10).End(xlUp).Row
If Cells(i, 10) > Date Then
Cells(i - 1, 10).Select
Exit Sub
End If
Next i
End Sub

Gruß
Rudi
AW: Makro: Datum anzeigen das Heute oder "kleiner" ist
26.04.2010 16:23:47
onkelbobby
Hallo Rudi,
das haut nicht ganz hin!
Die Daten sind ja nicht wirklich größer als das heutige Datum, sondern alle kleiner. Es geht um das Geburtsdatum. Es müssen also nur Monate und Tage verglichen werden.
Leider hab ichs auch noch nicht hingekriegt.
Anzeige
AW: Makro: Datum anzeigen das Heute oder "kleiner" ist
26.04.2010 16:28:29
fcs
Hallo Robert,
wenn du nach dem Geburtsdatum sortierst, dann entspricht das ja nicht der Reihenfolge der Geburtstage im aktuellen Jahr. Wenn 2 Personen am gleichen Tag aber unterschiedlichen jahren geboren wurden gibt es auch Probleme beim Suchen.
Besser/einfacher ist es, wenn du in einer weiteren Spalte per Formel den Geburtstag im laufenden Jahr berechnest und nach dieser Spalte sortierst. Dann kann man auch relativ einfach ein Datum relativ zum aktuellen Datum heraus suchen.
Gruß
Franz
Spalte J		Spalte K
Geburtstag	TT.MMM
01.01.1990	01.Jan
22.04.1998	22.Apr
25.04.1955	25.Apr
25.04.1990	25.Apr
25.04.1991	25.Apr
25.04.2001	25.Apr
30.04.2000	30.Apr
02.05.2000	02.Mai
Zelle	Formula-Local
$K$2	=DATUM(JAHR(HEUTE());MONAT(J2);TAG(J2))
$K$3	=DATUM(JAHR(HEUTE());MONAT(J3);TAG(J3))
usw.

Spalte K ist benutzerdefiniert formatiert als: TT.MMM
angepasstes Makro
Sub atest()
Dim dHeute As Date
Dim i As Integer
dHeute = Date
For i = 2 To [J65000].End(xlUp).Row
If dHeute = Cells(i, 11) Then
Cells(i, 10).Select
Exit For
ElseIf dHeute 

Anzeige
Datumsuche ohne Hilfsspalte
26.04.2010 16:41:05
Erich
Hi Robert,
probier mal

Option Explicit
Sub tt2()
Dim zz As Long, lngH As Long, lngD As Long, lngT As Long, zMerk As Long
lngH = 1 * Format(Date, "mmdd")
For zz = 1 To Cells(Rows.Count, 10).End(xlUp).Row
lngT = 100 * Month(Cells(zz, 10)) + Day(Cells(zz, 10))
If lngT  lngD Then
lngD = lngT
zMerk = zz
End If
Next zz
If zMerk > 0 Then Cells(zMerk, 10).Select
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Datumsuche ohne Hilfsspalte
26.04.2010 16:49:23
onkelbobby
Hallo Erich!
Ohne Hilfsspalte wäre mir schon recht (trotzdem danke für die Lösung von anderen Usern).
Dein Makro verstehe ich zwar gar nicht, scheint aber in einer Testdatei zu funktionieren.
In meiner eigentlichen Datei kommt jedoch der Laufzeitfehler 13. Ich vermute das hängt damit zusammen, dass in einigen Zeilen kein Datum eingetragen ist.
Wie kann ich das Makro dazu bringen, diese Zeilen zu ignorieren?
Danke!
Anzeige
AW: Datumsuche ohne Hilfsspalte
26.04.2010 16:55:57
onkelbobby
Seltsam,
habe gerade mal alle Daten die ohne Geburtstag waren mit Daten gefüllt. Trotzdem kommt der Laufzeitfehler 13 "Typen unverträglich" und nach dem Debuggen springt der Cursor in diese Zeile:
lngT = 100 * Month(Cells(zz, 10)) + Day(Cells(zz, 10))
Ich habe den Code hinter den Code für die Sortierung gehänt.
Ausgelöst wird das Modul durch einen Button.
Hier mal der komplette Code:
Sub Geburtstage()
Rows("3:65536").Select
Selection.Sort Key1:=Range("AC3"), Order1:=xlAscending, Key2:= _
Range("AD3"), Order2:=xlAscending, Key3:=Range("A3"), Order3:=xlAscending _
, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal
Dim zz As Long, lngH As Long, lngD As Long, lngT As Long, zMerk As Long
lngH = 1 * Format(Date, "mmdd")
For zz = 1 To Cells(Rows.Count, 10).End(xlUp).Row
lngT = 100 * Month(Cells(zz, 10)) + Day(Cells(zz, 10))
If lngT  lngD Then
lngD = lngT
zMerk = zz
End If
Next zz
If zMerk > 0 Then Cells(zMerk, 10).Select
End Sub
Was mache ich falsch?
Anzeige
AW: Datumsuche ohne Hilfsspalte
26.04.2010 17:00:26
onkelbobby
Kommando zurück!
Ich habs.
Da die erste Zeile bei mir leer ist, habe ich die Zeile wie folgt abgeänert:
For zz = 3 To Cells(Rows.Count, 10).End(xlUp).Row
Jetzt klappts.
vielen Dank!
Datumsuche ohne Hilfsspalte robuster
26.04.2010 17:08:40
Erich
Hi Robert,
erst mal zwei Bemerkungen:
Dim-Anweisungen würde ich immer vor allen anderen Anweisungen am Anfange der Prozedur platzieren.
Für meine Prozedur zur Geburtstagssuche müssen die Datums nicht irgendwie sortiert sein.
So läuft sie auch, wenn es leere Zellen oder z. B. Zellen mit Texten in Spalte J gibt:

Option Explicit
Sub tt2()
Dim zz As Long, lngH As Long, lngD As Long, lngT As Long, zMerk As Long
lngH = 1 * Format(Date, "mmdd")
For zz = 1 To Cells(Rows.Count, 10).End(xlUp).Row
If IsDate(Cells(zz, 10)) Then
lngT = 100 * Month(Cells(zz, 10)) + Day(Cells(zz, 10))
If lngT  lngD Then
lngD = lngT
zMerk = zz
End If
End If
Next zz
If zMerk > 0 Then Cells(zMerk, 10).Select
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro zur Anzeige von Datumswerten in Excel


Schritt-für-Schritt-Anleitung

  1. Vorbereitung der Daten: Stelle sicher, dass deine Geburtsdaten in Spalte J im Format TT.MM.JJJJ eingegeben sind.

  2. Erstelle ein neues Makro: Öffne den VBA-Editor mit ALT + F11 und erstelle ein neues Modul.

  3. Code eingeben: Verwende den folgenden VBA-Code, um die Zelle mit dem nächstgelegenen Geburtsdatum zu markieren:

    Sub MarkiereNaechstenGeburtstag()
        Dim dHeute As Date
        Dim i As Long
        Dim naechsterGeburtstag As Long
        dHeute = Date
        naechsterGeburtstag = 0
    
        For i = 1 To Cells(Rows.Count, 10).End(xlUp).Row
            If IsDate(Cells(i, 10)) Then
                If Cells(i, 10) >= dHeute Then
                    Cells(i, 10).Select
                    Exit Sub
                Else
                    naechsterGeburtstag = i
                End If
            End If
        Next i
    
        If naechsterGeburtstag > 0 Then
            Cells(naechsterGeburtstag, 10).Select
        End If
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über einen Button oder direkt über F5 im VBA-Editor aus.


Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Dieser Fehler tritt auf, wenn in der Zelle kein Datum enthalten ist. Stelle sicher, dass alle Zellen in Spalte J gültige Datumswerte enthalten oder implementiere die IsDate-Funktion, um diese zu überprüfen.

  • Zelle nicht markiert: Wenn nach Ausführung des Makros keine Zelle markiert wird, könnte das an ungültigen Datumsformaten oder leeren Zellen liegen.


Alternative Methoden

Eine alternative Methode zur Datumsuche ohne Hilfsspalte wäre die Verwendung des folgenden Makros:

Sub SucheOhneHilfsspalte()
    Dim zz As Long, lngH As Long, lngD As Long, lngT As Long, zMerk As Long
    lngH = 1 * Format(Date, "mmdd")
    For zz = 1 To Cells(Rows.Count, 10).End(xlUp).Row
        If IsDate(Cells(zz, 10)) Then
            lngT = 100 * Month(Cells(zz, 10)) + Day(Cells(zz, 10))
            If lngT < lngD Then
                lngD = lngT
                zMerk = zz
            End If
        End If
    Next zz
    If zMerk > 0 Then Cells(zMerk, 10).Select
End Sub

Diese Methode ermöglicht es dir, das Datum anzuzeigen, das kleiner als heute ist, ohne eine Hilfsspalte zu benötigen.


Praktische Beispiele

Hier sind einige Beispiele, die dir bei der Umsetzung helfen:

  1. Beispiel zur Verwendung von IsDate:

    If IsDate(Cells(i, 10)) Then
       ' Verarbeitung für gültige Datumswerte
    End If
  2. Beispiel zur Berechnung des nächstgelegenen Geburtstags:

    If Cells(i, 10) < dHeute Then
       ' Zelle mit dem letzten Geburtstag markieren
    End If

Tipps für Profis

  • Verwende benutzerdefinierte Formate: Um die Lesbarkeit zu erhöhen, kannst du die Formatierung der Datumszellen anpassen.

  • Datumssortierung: Überlege, eine zusätzliche Spalte zu verwenden, in der die Geburtstage im aktuellen Jahr angezeigt werden. Dies erleichtert die Suche nach dem nächstgelegenen Datum.

  • Debugging: Nutze die Debugging-Funktionen im VBA-Editor, um Fehler schnell zu identifizieren und zu beheben.


FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob ein Datum kleiner als heute ist? Du kannst den Vergleich wie folgt durchführen:

If Cells(i, 10) < Date Then
    ' Code für das Datum kleiner als heute
End If

2. Was ist der Unterschied zwischen Date und Now in VBA? Date gibt das aktuelle Datum ohne die Uhrzeit zurück, während Now das aktuelle Datum sowie die Uhrzeit zurückgibt.

3. Wie kann ich das Makro anpassen, um auch in anderen Spalten nach Daten zu suchen? Ändere einfach die Spaltennummer in der Cells(i, 10)-Referenz zu der gewünschten Spalte.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige