Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wenn Suchdatum innerhalb Zeitraum, dann

Forumthread: Wenn Suchdatum innerhalb Zeitraum, dann

Wenn Suchdatum innerhalb Zeitraum, dann
23.06.2020 11:04:22
Peter
Werte vba-Anwender,
ich suche nach einer Lösung, wie man überprüfen kann, ob ein Datum (per Input-Feld eingegeben) innerhalb eines Zeitraums liegt, dessen Start- und Endwerte in zwei Spalten (B und C) nebeneinander stehen. Also z.B. Spalte B Startdatum: 05.03.2020 und Spalte C Enddatum: 25.04.2020. Nach Inputeingabe irgend eines Datums, dass innerhalb dieses Zeitraums liegt, soll die Zeile markiert werden. Dabei stehen in Spalte C nur unregelmäßig Endwerte, viele Zellen sind leer. Beide Spalten sind als Datum (dd.mm.yyyy) formartiert.
Mein Code bisher funktioniert soweit, dass alle Zeilen markiert werden, wenn entweder genau das Start- oder das Enddatum eingegeben wird. Wie kann ich den Code erweitern, das auch alle Tage im Zeitraum überprüft werden? Ich freue mich über einen Tip oder Lösungsansatz.

Sub SearchDate()
Dim rngFind As Range, rngFindc As Range, rngRows As Range
Dim sFind As String, sFindc As String, sSearch As Date
'Dim startDat As Date, endDat As Date
On Error Resume Next
sSearch = InputBox("Suchdatum:", , Date)
Set rngFind = Columns.Item("B:C").Find(sSearch)
If rngRows Is Nothing Then
Set rngRows = rngFind
End If
If Not rngFind Is Nothing Then  'Or sSearch 

Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
23.06.2020 11:29:26
UweD
Hallo
Welches Datum soll denn angenommen werden, wenn das END Datum fehlt?
Jahresende?
LG UweD
AW: Wenn Suchdatum innerhalb Zeitraum, dann
23.06.2020 12:04:50
Peter
Hallo Uwe,
vielen Dank für deinen Beitrag. Wenn das Enddatum fehlt, wird die Zeile nur markiert, wenn das Startdatum mit dem Suchdatum übereinstimmt. Spalte B ist durchgehend mit Datumswerten befüllt. Spalte C dagegen nur unregelmäßig. Wenn durch das Vorhandensein eines (höheren) Datums in Spalte C ein Zeitraum definiert ist (und nicht nur ein einziger Tag (Spalte B), dann soll der Code überprüfen, ob das Inputsuchdatum in diesem Zeitraum liegt.
Also: Spalte B Datum prüfen: Datum gleich Suchdatum, dann zeile markieren. Spalte C prüfen, wenn Wert vorhanden, dann zeitraum definiert, dann prüfen ob Suchdatum in Zeitraum, wenn ja, Zeile markieren, nächste Zeile überprüfen.
Es müsste an geeigneter Stelle im Code die Abfrage plaziert werden, ob das Suchdatum größer gleich Datum in Spalte B und kleiner gleich Datum in Spalte C (wenn Enddatum verhanden) ist. Da hab ich schon rumprobiert aber nichts Gescheites zustande bekommen.
Anzeige
AW: Wenn Suchdatum innerhalb Zeitraum, dann
23.06.2020 22:06:53
Peter
hat jemand eine Idee?
AW: Wenn Suchdatum innerhalb Zeitraum, dann
24.06.2020 14:44:53
UweD
Lade mal eine Musterdatei hoch
LG UweD
AW: Wenn Suchdatum innerhalb Zeitraum, dann
24.06.2020 20:38:02
Peter
Hi Uwe,
das mache ich, muss in der Datei allerdings noch Daten löschen. Wird heute leider nix mehr, hab die kommenden Tage mehr Zeit. Danke für deine Nachricht und bis dahin,
LG, Peter
Anzeige
AW: Wenn Suchdatum innerhalb Zeitraum, dann
25.06.2020 14:26:34
Peter
Hallo Uwe und alle anderen VBA-Experten,
ich habe mal eine abgespeckte Musterdatei ( https://www.herber.de/bbs/user/138558.xlsm
) hochgeladen aus der hervorgehen sollte was mein Anliegen ist. Nehmen wir einfach an es handelt sich bei der Tabelle um Gültigkeiten von Fahrkarten. Eine Fahrkarte ist immer mindestens an einem Tag gültig, nämlich an dem Datum welches in Spalte B steht. Manche Fahrkarten sind aber über einen Zeitraum gültig, nämlich dann, wenn in Spalte C ein späteres Datum steht. Dann ist also ein Gültigkeitszeitraum definiert.
Der Code markiert mir bereits erfolgreich alle Zeilen, wenn ich ein vorhandenes Datum in der Inputsuchfeld eingebe. (Standardmäßig steht im Input das aktuelle Datum, spielt aber keine Rolle). Wenn ich jetzt ein Datum eingebe, welches innerhalb eines Zeitraums liegt, soll(en) die Zeile(n) auch markiert werden - und das funktioniert noch nicht, weil ich nicht weiß, wo ich da ansetzen muss. Müsste sowas sein wie: Wenn Datum in Spalte C, dann Zeitraum, dann prüfen, ob Suchdatum zwischen Start- und Enddatum liegt, bzw größer gleich Datum in Spalte B und kleiner gleich Datum in Spalte C ist.
Konkretes Beispiel: Suche nach dem 15.02.2020. Markiert wird korrekt die Zeile 24 (Person 21). ABER: es fehlt die Markierung der Zeile 32 (Person 29). Denn der 15.02.2020 liegt innerhalb des Zeitraums zwischen 08.02.2020 und 16.02.2020 und soll auch markiert werden. Bin dankbar für jede Hilfe. Den bestehenden vba-Code habe ich zu Anfang gepostet.
Anzeige
AW: Wenn Suchdatum innerhalb Zeitraum, dann
29.06.2020 09:30:25
UweD
Hallo
so?

Sub SearchDate()
Dim sSearch As Variant
Dim LR As Integer, i As Integer, Z1 As Integer, Sp As Integer, RNG As Range
Dim Treffer As Integer
Z1 = 4 'Werte ab dieser Zeile
Sp = 2 'Spalte mit Datum
sSearch = InputBox("Suchdatum:", , Date)
If IsDate(sSearch) Then
LR = Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
Set RNG = Cells(Z1, 1).Resize(LR - Z1 + 1, 5)
'Reset
RNG.Interior.Pattern = xlNone
For i = Z1 To LR
'entweder nur genau der Tag, oder zwischen den beiden Tagen
If (Cells(i, Sp) = sSearch And Cells(i, Sp).Offset(0, 1) = "") _
Or (Cells(i, Sp) = sSearch) Then
'gelb färben
With Intersect(RNG, Rows(i)).Interior
.Pattern = xlSolid
.Color = 65535
End With
Treffer = Treffer + 1 'zählen
End If
Next
If Treffer >0 Then
MsgBox "Fertig. Treffer= " & Treffer
Else
MsgBox "Kein Eintrag mit diesem Suchdatum!"
End If
Else
MsgBox "Ungültige Eingabe!"
End If
End Sub

LG UweD
Anzeige
Ergänzung
29.06.2020 10:09:06
UweD
Hi
Bitte noch eine Zeile ergänzen

If IsDate(sSearch) Then
        sSearch = CDate(sSearch)
LR = Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
Set RNG = Cells(Z1, 1).Resize(LR - Z1 + 1, 5)

AW: Wenn Suchdatum innerhalb Zeitraum, dann
29.06.2020 11:57:51
Peter
Hallo Uwe,
ich bin sprachlos begeistert, fünf Sterne, A++, damit hätte ich nun gar nicht gerechnet, dass du mir perfekt funktionierenden Code auf dem Silbertablett servierst. Ganz, ganz herzlichen Dank dafür!
Ich hatte es zwischenzeitlich geschafft mit viel Gefrickel die eine Spalte B per For-Schleife (ohne FIND) abzufragen und alle Trefferzeilen zu selektieren. Von dem, was du mir programmiert hast war ich allerdings noch Lichtjahre entfernt.
Ich hoffe, ich schaffe es jetzt noch die markierten Treffer en bloque in ein weiteres sheet zu kopieren. Das war mir aber schon mal gelungen und ich müsste das hinkriegen.
Nochmals Danke für Deine Mühe, du hast mir sehr geholfen.
LG, Peter
PS: Ich hatte das mit den offenen Fragen missverstanden und gebe mir Mühe, künftig die Regeln einzuhalten.
Anzeige
AW: Wenn Suchdatum innerhalb Zeitraum, dann
29.06.2020 15:59:18
UweD
Hi
Warum "en bloque"
da du ja jetzt sowieso Zeilenweise arbeitest, kannst du anstelle / oder zusätzlich zum Färben genau den Bereich kopieren.
LG UweD
AW: Wenn Suchdatum innerhalb Zeitraum, dann
30.06.2020 12:17:54
Peter
Hallo Uwe,
letztlich sollen alle Treffer in einem Nachbarsheet landen. Ich habe dich so verstanden, dass ich an der ersten Zeile deines "With intersect-Blocks" ansetzen müsste, um zeilenweise (Treffer für Treffer) in ein Nachbarheet zu kopieren. (Intersect beinhaltet mindestens zwei oder mehr Ranges, kannte ich vorher noch nicht).
Kurzum: Es raucht, ich komme nicht weiter und habe Schrott produziert. Folgender Code ist ein Mix aus meinem Gefrickel und deiner If-Abfrage. Das führt zu nichts und ich poste den nur, damit du eine Vorstellung hast, was ich u.a. mit enbloque meinte. Das funktioniert allerdings nur ungenügend. Ich möchte gerne deinen sauberen Code benutzen, weiß aber nicht, wie ich den sinnvoll ergänzen muss, damit selektierte Treffer sowohl im Sheet Kartenliste als auch im Nachbarsheet Treffer erscheinen. Darf ich dich nochmals um Hilfe bitten?
Sub SearchDate()
Dim i As Integer    'Zählvariable
Dim sSearch As String 'Suchdatum (eigentlich date ?!)
Dim sRes As Range   'Ergebniszeile
Dim lastRow As Long 'Suchspaltenende
Dim Sp As Integer
'On Error Resume Next
Sp = 2
Worksheets(2).Rows("2:65536").ClearContents
sSearch = InputBox("Suchdatum:", , Date)
If sSearch = "" Then Exit Sub
With Worksheets("Kartenliste")
lastRow = Cells(Rows.Count, Sp).End(xlUp).Row    'Suche in Spalte B bis letzte gefüllte Zeile
For i = 4 To lastRow   'Ab Zeile 4 unterhalb Spaltenüberschrift anfangen zu suchen
'If .Cells(i, 2) = sSearch Then    'bei Treffer nächste Zeile
If (Cells(i, Sp) = sSearch And Cells(i, Sp).Offset(0, 1) = "") _
Or (Cells(i, Sp) = sSearch) Then
If sRes Is Nothing Then         '?
Set sRes = Cells.Rows(i)    '?
Else
Set sRes = Union(sRes, Cells.Rows(i))   'Zeile merken?
End If
End If
Next i
sRes.Select    'alle gefundenen Ergebniszeilen auswählen
End With
Selection.Copy
Sheets("Treffer").Select
Range("A2").Select
ActiveSheet.Paste
Columns("A:E").EntireColumn.AutoFit
Application.CutCopyMode = False
End Sub
'Else
'MsgBox "Kein Suchdatum gefunden"
'Exit Sub

Anzeige
AW: Wenn Suchdatum innerhalb Zeitraum, dann
25.06.2020 20:06:57
Klause
Hi Peter
Dein Makro sucht Zeilen mit genauer Übereinstimmung.
Eine Schleife wäre angebracht, in der Du jede Zeile auf die gegebenen Kriterien überprüfst.
Als Schleifenbeginn könntest Du
for i=4 to range("A3").currentregion.rows.count
wählen.
Gruß, Klause
AW: Wenn Suchdatum innerhalb Zeitraum, dann
25.06.2020 21:05:48
Peter
Hallo Klause,
vielen Dank für deine Anregung. Ich werde mal versuchenden Code mit deiner Schleife zu versehen und darin prüfen a.) ist Nachbarfeld Spalte C nicht leer, dann b.) ist Suchdatum größer gleich Startdatum und kleiner gleich Enddatum, dann markieren. Somit eine Schleife mit zwei verschachtelten if-Abfragen. Brauche etwas Zeit das auszuprobieren. Melde mich bei Er- oder Misserfolg.
Gruß, P.
Anzeige
AW: Wenn Suchdatum innerhalb Zeitraum, dann
26.06.2020 11:45:12
Hajo_Zi
offen bedeutet es soll noch eine Antwort kommen.
Warum ist dein Beitrag Offen.
Du willst doch was machen. Soll jemand vorbei kommen?
Das ist nur meine Meinung zu dem Thema.

;
Anzeige

Infobox / Tutorial

Suchdatum innerhalb eines Zeitraums prüfen und markieren


Schritt-für-Schritt-Anleitung

Um in Excel zu prüfen, ob ein Datum innerhalb eines bestimmten Zeitraums liegt und die entsprechenden Zeilen zu markieren, kannst du den folgenden VBA-Code verwenden. Der Code geht davon aus, dass das Startdatum in Spalte B und das Enddatum in Spalte C steht.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und dann auf Modul, um ein neues Modul zu erstellen.
  3. Kopiere den folgenden Code in das Modul:
Sub SearchDate()
    Dim sSearch As Variant
    Dim LR As Long, i As Long, Z1 As Long, Sp As Long, RNG As Range
    Dim Treffer As Long
    Z1 = 4 ' Werte ab dieser Zeile
    Sp = 2 ' Spalte mit Datum
    sSearch = InputBox("Suchdatum:", , Date)
    If IsDate(sSearch) Then
        sSearch = CDate(sSearch)
        LR = Cells(Rows.Count, Sp).End(xlUp).Row ' letzte Zeile der Spalte
        Set RNG = Cells(Z1, 1).Resize(LR - Z1 + 1, 5)
        ' Reset
        RNG.Interior.Pattern = xlNone
        For i = Z1 To LR
            If (Cells(i, Sp) = sSearch And Cells(i, Sp).Offset(0, 1) = "") _
            Or (Cells(i, Sp) = sSearch) _
            Or (Cells(i, Sp) <= sSearch And Cells(i, Sp).Offset(0, 1) >= sSearch) Then
                ' gelb färben
                With Intersect(RNG, Rows(i)).Interior
                    .Pattern = xlSolid
                    .Color = 65535
                End With
                Treffer = Treffer + 1 ' zählen
            End If
        Next
        If Treffer > 0 Then
            MsgBox "Fertig. Treffer= " & Treffer
        Else
            MsgBox "Kein Eintrag mit diesem Suchdatum!"
        End If
    Else
        MsgBox "Ungültige Eingabe!"
    End If
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.

Damit wird überprüft, ob das eingegebene Datum innerhalb eines Zeitraums liegt und die entsprechenden Zeilen werden markiert.


Häufige Fehler und Lösungen

  • Fehler: "Ungültige Eingabe!"

    • Stelle sicher, dass du ein gültiges Datum im Format dd.mm.yyyy eingibst.
  • Fehler: "Kein Eintrag mit diesem Suchdatum!"

    • Überprüfe, ob das Datum in Spalte B oder C korrekt eingegeben wurde und dass Spalte B nicht leer ist.
  • Problem: Zeilen werden nicht korrekt markiert

    • Achte darauf, dass die Datumsformate in Excel korrekt eingestellt sind. Beide Spalten müssen als Datum formatiert sein.

Alternative Methoden

Eine einfache Methode, um zu überprüfen, ob ein Datum innerhalb eines Zeitraums liegt, ist die Verwendung von Formeln in Excel:

  • Formel: =WENN(UND(A1>=B1; A1<=C1); "Innerhalb"; "Außerhalb")
  • In diesem Fall steht A1 für das Suchdatum, B1 für das Startdatum und C1 für das Enddatum.

Praktische Beispiele

  • Beispiel 1: Du hast in Spalte B das Datum 05.03.2020 und in Spalte C das Datum 25.04.2020. Wenn du das Datum 15.03.2020 suchst, wird die Zeile markiert, da es im Zeitraum liegt.

  • Beispiel 2: Wenn in Spalte B 01.01.2021 und in Spalte C kein Datum steht, wird nur die Zeile markiert, wenn das Suchdatum 01.01.2021 eingegeben wird.


Tipps für Profis

  • Nutze die Union-Funktion, um mehrere Bereiche zu markieren und damit die Performance des Codes zu verbessern.
  • Experimentiere mit weiteren Bedingungen, um spezifische Anforderungen zu erfüllen, beispielsweise das Filtern von Werten basierend auf anderen Spalten.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um auch leere Enddaten zu berücksichtigen?
Füge eine Bedingung hinzu, die prüft, ob das Enddatum leer ist und nur das Startdatum vergleicht.

2. Kann ich die markierten Zeilen in ein anderes Blatt kopieren?
Ja, du kannst den Code erweitern, um die markierten Zeilen in ein anderes Arbeitsblatt zu kopieren, indem du den Copy-Befehl verwendest.

3. Funktioniert dieser Code in allen Excel-Versionen?
Der VBA-Code sollte in den meisten modernen Excel-Versionen (Excel 2010 und höher) funktionieren. Achte darauf, dass die Makros aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige