Excel VBA – Wie Sie beliebiges Datum in einer Liste finden
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.
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.
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)
.
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
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.
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.
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.
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
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!