Excel VBA – Wie Sie beliebiges Datum in einer Liste finden

Excel VBA - Wie Sie beliebiges Datum in einer Liste finden
Excel VBA – Wie Sie beliebiges Datum in einer Liste finden
5 Sterne
6 Bewertungen

In einem früheren Beitrag habe ich Ihnen gezeigt, wie Sie das aktuelle Datum in einer Liste ausfindig machen. In diesem Beitrag zeige ich Ihnen, wie Sie ein beliebigen Tag des aktuellen Monats finden können.

111 VBA Makros die Ihr Leben leichter machen. Egal ob Sie Einsteiger oder fortgeschrittener Anwender sind – in diesem Buch finden Sie Lösungen für Ihre alltäglichen Aufgaben. Keine Vorkenntnisse notwendig.

Wie im vorherigen Beispiel soll in der gefundenen Datumszeile ebenfalls die Nebenzelle selektiert werden. So können Sie bequem Ihre Eingabe machen.
Dieser Beitrag ist ein Teil der VBA Grundlagen Serie.

Ausgangstabelle

In diesem Beispiel wird ein Eingabedialog für die Eingabe der Tageszahl verwendet. Dazu verwenden wir den Befehl InputBox. Der Eingabedialog wird über eine Do ... Loop Anweisung solange aufgerufen, bis eine gültige Tageszahl eingegeben wurde oder der Benutzer den Abbrechen Button gedrückt hat.


Sub BeliebigesDatumFinden()
Dim rngZelle As Range
Dim varTag As Variant

Do
'Eingabedialog
varTag = Application.InputBox _
("Bitte Tageszahl des aktuellen Monats eingeben.", _
"Gesuchtes Datum", 1, , , , , 1)


End Sub

Für den Eingabedialog nutzen wir die InputBox Methode. Die InputBox Methode hat die folgende Syntax: Application.InputBox (Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type).


Unternehmensplanung mit SAP BPC

111 VBA Makros die Ihr Leben leichter machen

Wollen Sie Ihre langweiligen Routineaufgaben loswerden? Möchten Sie Excel an Ihre Bedürfnisse anpassen, Berechnungen automatisieren, eigene Dialogfelder erstellen und vieles mehr? Dieses Buch zeigt Ihnen, wie Sie Ihre Aufgaben schnell und einfach mit VBA erledigen.

Als Standardwert soll eine 1 angezeigt werden. Außerdem setzen wir den Parameter Type auf 1, um Zahlen zu übergeben. Der eingegebene Wert wird an die Variable varTag übergeben.

Falls der Benutzer abbrechen klickt, wird das Makro beendet.


Sub BeliebigesDatumFinden()
Dim rngZelle As Range
Dim varTag As Variant

Do
'Eingabedialog
varTag = Application.InputBox _
("Bitte Tageszahl des aktuellen Monats eingeben.", _
"Gesuchtes Datum", 1, , , , , 1)

'Abbrechen geklickt, Makro beenden
If varTag = False Then Exit Sub

End Sub

Eingabefenster

Wie können wir aber prüfen, ob der eingegebene Wert einen gültigen Tag im aktuellen Monat darstellt? Die Anzahl der Tage im Monat kann zwischen 28 und 31 Tagen variieren. Daher müssen wir ermitteln, wie viele Tage der aktuelle Monat hat. Dazu nutzen wir die Funktion DateSerial. Wir ziehen von dem nachfolgenden Monat ein Tag ab, so dass die Funktion das Datum des letzten Tages des aktuellen Monats ausgibt. Im Januar 2018 liefert die Funktion den 31.01.2018.

Diesen Wert nutzen wir in der Day Funktion, um die Anzahl der Tage im aktuellen Monat zu ermitteln.


Sub BeliebigesDatumFinden()
Dim rngZelle As Range
Dim varTag As Variant

Do
'Eingabedialog
varTag = Application.InputBox _
("Bitte Tageszahl des aktuellen Monats eingeben.", _
"Gesuchtes Datum", 1, , , , , 1)

'Abbrechen geklickt, Makro beenden
If varTag = False Then Exit Sub

Day(DateSerial(Year(Date), Month(Date) + 1, -1))

End Sub

Nun können wir prüfen, ob die in die InputBox eingegebene Tageszahl größer als die Anzahl der Tage des Monats ist. Wenn der Wert der Variable varTag größer ist, wird dieses Datum nicht in der Tabelle vorhanden sein. Deshalb setzen wir den Wert der Variable varTag auf 0, damit die Do ... Loop Schleife nochmals durchlaufen wird. Dadurch wird der Eingabedialog erneut aufgerufen.


Sub BeliebigesDatumFinden()
Dim rngZelle As Range
Dim varTag As Variant

Do
'Eingabedialog
varTag = Application.InputBox _
("Bitte Tageszahl des aktuellen Monats eingeben.", _
"Gesuchtes Datum", 1, , , , , 1)

'Abbrechen geklickt, Makro beenden
If varTag = False Then Exit Sub

'Prüfe, ob Eingabewert größer als letzter Monatstag
If varTag > _
Day(DateSerial(Year(Date), Month(Date) + 1, -1)) _
Then

'Variable zurücksetzen
varTag = 0
End If
Loop Until varTag > 0

End Sub

Wir können aber auch eine entsprechende Fehlermeldung ausgeben.

Fehlermeldung in VBA ausgeben

Dann sieht der Code wie folgt aus:


Sub BeliebigesDatumFinden()
Dim rngZelle As Range
Dim varTag As Variant

Do
'Eingabedialog
varTag = Application.InputBox _
("Bitte Tageszahl des aktuellen Monats eingeben.", _
"Gesuchtes Datum", 1, , , , , 1)

'Abbrechen geklickt, Makro beenden
If varTag = False Then Exit Sub

'Prüfe, ob Eingabewert größer als letzter Monatstag
If varTag > _
Day(DateSerial(Year(Date), Month(Date) + 1, -1)) _
Then

MsgBox "Ihre Eingabe ist kein gültiger Tag des Monats " & _
Format(Date, "mmmm"), _
vbCritical, "Fehlerhafte Eingabe"

'Variable zurücksetzen
varTag = 0
End If
Loop Until varTag > 0

End Sub

 

Falls aber ein gültiger Tageswert eingegeben wurde, wird im Datenbereich über die Find Methode der Zellbezug des gesuchten Datums an die Variable rngZelle übergeben.

Da der Wert der varTag Variable nun größer als 0 ist, wird die Schleife verlassen und die rechte Nebenzelle der gefundenen Datumszelle markiert.

Datum wurde gefunden

Das fertige Makro sieht nun so aus:


Sub BeliebigesDatumFinden()
Dim rngZelle As Range
Dim varTag As Variant

Do
'Eingabedialog
varTag = Application.InputBox _
("Bitte Tageszahl des aktuellen Monats eingeben.", _
"Gesuchtes Datum", 1, , , , , 1)

'Abbrechen geklickt, Makro beenden
If varTag = False Then Exit Sub

'Prüfe, ob Eingabewert größer als letzter Monatstag
If varTag > _
Day(DateSerial(Year(Date), Month(Date) + 1, -1)) _
Then

MsgBox "Ihre Eingabe ist kein gültiger Tag des Monats " & _
Format(Date, "mmmm"), _
vbCritical, "Fehlerhafte Eingabe"

'Variable zurücksetzen
varTag = 0
Else
'Gesuchte Zelle finden
Set rngZelle = _
Range("A2:A20").Find _
(What:=DateSerial(Year(Date), Month(Date), varTag), _
LookIn:=xlValues)
End If
Loop Until varTag > 0

'Umsatz (Nebenzelle der Fundzelle) auswählen
rngZelle.Offset(0, 1).Select

End Sub

Quellen und weiterführende Verweise:
Microsoft Developer Network – Application.InputBox-Methode

Die Beispiel Excel Datei mit dem sofort einsetzbaren Makro und 111+ andere Makros, die Ihr Leben leichter machen, finden Sie hier.

Beeindrucke deinen Chef mit coolen Excel Tricks!

  • Lasse dich von deinen Kollegen nicht abhängen!
  • Spare Zeit und nutze diese für angenehmere Dinge
  • Steigere deine Produktivität und Effizienz
  • Es ist leicht - In meinem Newsletter gebe ich Schritt für Schritt Anleitungen die jeder versteht
  • Bei der Anmeldung zu meinem Newsletter erhälst du das Buch „Excel Tricks die deinen Chef beeindrucken“ als Willkommensgeschenk.
20 Excel Tricks

Jetzt anfordern!

* Pflichtfeld
 
Kein SPAM. 100% sicher.

Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.

Bildquelle: Pexels, CC0 Public Domain

Denis Reis ist Business Intelligence Consultant und gibt als Buchautor sein Wissen rund um den SAP Projektalltag weiter. Wenn Sie tatkräftige Unterstützung bei Ihren SAP BI Projekten benötigen, können Sie ihn über Xing, LinkedIn oder Facebook kontaktieren.
Des Weiteren unterrichtet er Projektmanagement und Controlling an der Wiesbaden Business School. Der aus Düsseldorf stammende Familienmensch zählt zu denjenigen, die auf komplizierte Darstellungen verzichten und das Ganze auf den Punkt bringen.

0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Kommentar verfassen