Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1764to1768
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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 

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
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.

332 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige