Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1940to1944
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

Geburtstage aus Liste filtern mit Angabe Datum von bis

Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 15:37:23
Herbert Grom
Hallo,

Ich möchte über eine Inputbox das Startdatum eingeben und alle Geb-Daten filtern, die innerhalb dieses Zeitraumes bis zum heutigen Datum liegen.

Vielen Dank im Voraus.

Servus

https://www.herber.de/bbs/user/162182.xlsm

36
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Geburtstage aus Liste filtern mit Angabe Datum von bis
05.08.2023 19:22:36
Daniel
HI
man könnte, um Hilfsspalten zu vermeiden auch die Bedingte Formatierung zum Filtern nutzen.

Lass einmalig diesen Code laufen, er richtet die benötigte bedingte Formatierung in Spalte J ein:
Sub BedingteFormatierung_Einrichten()

With Columns("J:J")
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:="=UND(TEXT(J1;""MMTT"")=TEXT(HEUTE();""MMTT"");TEXT(J1;""MMTT"")>=DatumAb)"
.FormatConditions(.FormatConditions.Count).Font.Color = Farbe
End With
End Sub


Für die Eingabe und Filterung nimmst du dann diesen Code:
Sub Eingabe()

Dim txt
Do
txt = InputBox("Datum ab eingeben")
If txt = "" Then Exit Do
If IsDate(txt) Then
ThisWorkbook.Names.Add "DatumAb", RefersToR1C1:="=""" & Format(CDate(txt), "MMDD") & """"
ActiveSheet.Range("J:J").AutoFilter Field:=1, Criteria1:=Farbe, Operator:=xlFilterFontColor
ThisWorkbook.Names("DatumAb").Delete
Exit Do
Else
MsgBox "Bitte korrektes Datum eingeben"
End If
Loop
End Sub


im Prinzip kannst du das ganze auch Codefrei nach diesem Prinzip lösen:
1. Namen anlegen mit
Name: DatumAb
Bezieht sich auf:
=Text($A$1;"MMTT")


2. Für Spalte J Bedingte Formatierung anlegen mit der Formel als Regel:
=UND(TEXT(J1;""MMTT"")=TEXT(HEUTE();""MMTT"");TEXT(J1;""MMTT"")>=DatumAb)

und einer Schrift- oder Hintergrundfarbe

3. Filtere in Spalte J dann einfach nach dieser Farbe.

so macht es der Code, aber es geht auch ohne Makro.


Gruß Daniel
Anzeige
Geburtstage aus Liste filtern mit Angabe Datum von bis
05.08.2023 21:06:17
Daniel
Und du brauchst noch im Modul:.
Option Explicit

Const Farbe AS long = vbRed

Über die Konstante wird sicherstellt, das bedingte Formatierung und Code die selbe Farbe verwenden.

Gruß Daniel
Geburtstage aus Liste filtern mit Angabe Datum von bis
05.08.2023 17:27:54
snb
Warum nicht einfach das eingebaute Datumfilter benützen ?
Geburtstage aus Liste filtern mit Angabe Datum von bis
05.08.2023 17:36:36
snb
So sieht das aus:

Userbild
Geburtstage aus Liste filtern mit Angabe Datum von bis
05.08.2023 18:22:57
onur
Tolle Idee, würde auch funktionieren, wenn alle im selben Jahr geboren wären........
Geburtstage aus Liste filtern mit Angabe Datum von bis
05.08.2023 17:39:08
Herbert Grom
Das ist mir hinlänglich bekannt, doch ich brauchte eine VBA-Lösung!

Servus
Anzeige
Geburtstage aus Liste filtern mit Angabe Datum von bis
05.08.2023 17:30:30
Herbert Grom
Hallo Leute!!! Lasst es mal gut sein, ich habe es doch, dank Onur, bereits gelöst und brauche keine weiteren Vorschläge mehr! Trotzdem vielen Dank für euere Bemühungen!

Servus
Excel 365
05.08.2023 09:49:15
RPP63
Moin!
Mit Excel 365 einfach per Formel:
=FILTER(A2:AA395;(TEXT(J2:J395;"MMTT")>="0802")*(TEXT(J2:J395;"MMTT")=TEXT(HEUTE();"MMTT")))

Gruß Ralf
Excel 365
05.08.2023 10:08:34
Herbert Grom
Hallo Ralf,

vielen Dank für deine Formel, aber mein Bruder, für den ich das mache, hat leider kein 365.

Servus
... aber er hat, wie jeder andere auch:
05.08.2023 17:18:07
onur
Die Formel funktioniert aber nicht bei Jahresüberschreitung (z.B. von 28.12 bis 2.1. oder bis heute)
Anzeige
Du hast ja Recht, onur
05.08.2023 17:49:29
RPP63
… die korrekte Formel ist dann halt etwas umfangreicher.
Ich schau mal kurz in meinem Fundus:
Gefunden:
 ABCDE
1shift-del24.12.1971 flotterfeger31.10.1995
2slowboarder02.02.1984 shift-del24.12.1971
3steve1da05.05.1976 slowboarder02.02.1984
4lupo106.02.1999   
5oberon03.04.1968   
6steuerfuzzi16.06.1972   
7flotterfeger31.10.1995   
8rpp6303.05.1963   

ZelleFormel
D1=LET(m;"MMTT";
INDEX
(SORTIERENNACH(A1:B8;
TEXT
(B1:B8;m)+(TEXT(B1:B8;m)TEXT(HEUTE();m))*10^4);
{1;2;3};{1.2})
)
Anzeige
Hab ich jetzt nicht geprüft, da von RPP63
05.08.2023 17:29:53
lupo1
Ich würde es so machen
04.08.2023 18:05:34
Klexy
Sub Geburtstag_filtern()

Dim GebSpalte As Range, SuchSpalte As Range, s As Range, Von As String
Dim Tag As Integer, Monat As Integer, VonDatum As Date, GebDatum As Date, Heute As Date
Von = InputBox("Geburtstag von..." & vbCr & "Bitte im Format TT.MM. eingeben")
If Von = "" Then
Cells.EntireRow.Hidden = False
Exit Sub
End If
Tag = Left(Von, 2)
Monat = Mid(Von, 4, 2)
VonDatum = DateSerial(Year(Date), Monat, Tag)
Heute = DateSerial(Year(Date), Month(Date), Day(Date))

Set GebSpalte = Cells.Find(What:="Geb. Datum", After:=Range("A1"), LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set SuchSpalte = Intersect(ActiveSheet.UsedRange, GebSpalte.EntireColumn)
' SuchSpalte.Select
For Each s In SuchSpalte
' s.Select
If IsDate(s) = True Then
GebDatum = DateSerial(Year(Date), Month(s), Day(s))
If GebDatum >= VonDatum And GebDatum = Heute Then
s.EntireRow.Hidden = False
Else
s.EntireRow.Hidden = True
End If
End If
Next s
End Sub


EIngeblendet wird jeweils inklusive Suchdatum und inklusive Heute. Kannst du aber im Code ändern.
Du musst das Suchdatum in der geforderten Form eingeben. Das ist technisch gesehen kein Datum, sondern ein Text, ist aber hier einfacher zu verwursten und du willst es ja jahresunabhängig.
Wenn du nix eingibst, wird die Liste wieder komplett eingeblendet.
Anzeige
Ich würde es so machen
04.08.2023 18:12:14
Herbert Grom
Hallo Klexy,

vielen Dank für deine Lösung, die auch sehr gut funktioniert. Aber ich habe mich für onurs Lösung entschieden.

Servus
Und nochmal eleganter
04.08.2023 18:38:33
Herbert Grom
Hallo Klexy,

wirklich sehr schön. Aber schau mal, wie schön kurz onurs Code ist, der das gleiche macht:

Private Sub CommandButton1_Click()

Dim z, Tag, mon, t, m, dat, Von, da
t = Range("AG1"): m = Range("AI1")
Application.ScreenUpdating = False
For z = 2 To 1000
dat = Cells(z, "J")
If dat > "" Then
Cells(z, "J").Rows.Hidden = False
Tag = Day(dat): mon = Month(dat)
If Not CheckBox1 Then
If Tag > t Or mon > m Then Cells(z, "J").Rows.Hidden = True
Else
da = DateSerial(Year(Date), mon, Tag)
Von = DateSerial(Year(Date), m, t)
If da > Date Or da Von Then Cells(z, "J").Rows.Hidden = True
End If
End If
Next z
End Sub


Servus
Anzeige
Und nochmal eleganter
04.08.2023 18:51:41
Klexy
Sein Code ist kürzer, aber mein Handling ist einfacher.
Ich bin User-orientiert. Ich steh auf möglichst wenig Rumgeklicke und eindeutige Anzeigen. Bei mir weißt du immer , ob grad gefiltert ist oder nicht. Und wenn ja, wie gefiltert ist.
Und nochmal eleganter
04.08.2023 19:12:22
onur
Du bist ein EXCEL-GOTT...
Langsam wird es aber echt peinlich.
Und nochmal eleganter
05.08.2023 09:25:00
Klexy
Das ist ja schön, dass du auch eine Meinung hast und sie so detailliert begründest.
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 17:52:56
Herbert Grom
Hallo onur,

vielen Dank, das funzt prima!

Servus
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 18:00:51
onur
Wenn du auch noch Sreenupdating ausschaltest, geht es ratzfatz.
Anzeige
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 18:13:15
Herbert Grom
Genau, habe ich bereits gemacht! Danke!

Servus
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 20:30:37
onur
Hallo Herbert,
Ich hab sie noch verbessert bzw eine potentielle Fehlerquelle beseitigt. Wenn du z.B. am 5. Januar wissen wolltest, wer vom 15.12 bis dato Geburtstag hatte, gäbe es sonst Probleme (wegen der Jahresüberschneidung). Aus dem selben Grund ebenso, wenn du heute wissen willst, wer zwischen dem 1.11. und heute Geburtstag hat.
https://www.herber.de/bbs/user/162186.xlsm

Gruß
Onur
Geburtstage aus Liste filtern mit Angabe Datum von bis
05.08.2023 10:07:11
Herbert Grom
Hallo Onur,

wow, perfekt! Ein Traum! Vielen Dank! Es ist perfekter als ich das erträumt habe! Und gleichzeitig sehe ich, dass ich weiß, dass ich nix weiß. Jedenfalls noch viel zu wenig! Und es ist mir fast schon unglaublich, wie ich es, trotz lückenhaftem Wissen, geschafft habe, so viele Projekte für Firmen zu programmieren. Und das meine ich allen ernstes, ohne Koketterie! Um wie viel leichter wäre das für mich gewesen, wenn ich so einen Profi wie dich oder auch Daniel, Ralf oder Uwe, dabei gehabt hätte. Aber egal, Hauptsache es hat geklappt und ich habe echt gutes Geld damit verdient. Du kannst dir ja mal meine Referenzen auf meiner kleinen Info-Seite (excelhelper.de) ansehen. Nochmal vielen Dank!

Servus
Anzeige
Gerne !
05.08.2023 11:15:14
onur
Gerne !
04.08.2023 17:56:09
onur
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 16:17:16
UweD
Hallo Herbert

so?

    Dim Von As Date


With Sheets("Tab1")
If .FilterMode Then .ShowAllData ' Autofilter alle
Von = InputBox("Geburtstag von...")

If IsDate(Von) Then
.Range("J:J").AutoFilter Field:=1, Criteria1:=">=" & CLng(Von), _
Operator:=xlAnd, Criteria2:="=" & CLng(Date)
End If
End With



LG UweD
Anzeige
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 16:24:01
Herbert Grom
Hallo Uwe,

leider funzt das nicht, jedenfalls nicht bei mir. Was kann ich falsch machen? Meine Idee war, nicht das gesamte Datum zu suchen, sondern nur nach Monat und Tag, um die Geburtstagskandidaten zu ermitteln, unabhängig vom Jahr.

Servus
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 17:50:49
UweD
Hallo nochmal

Füge eine Hilfsspalte ein

Arbeitsblatt mit dem Namen 'Tab1'
 IJKLMNOPQRSTUVWXYZAAABAC
1 Geb. Datum                Alter  
2 07.12.1973                49 07.12.2023
3 30.05.1985                38 30.05.2023
4 22.09.1982                40 22.09.2023
5 23.11.1957                65 23.11.2023
6 28.07.1963                60 28.07.2023
7 17.03.1964                59 17.03.2023
8 19.07.1976                47 19.07.2023

ZelleFormel
AC2=DATUM(JAHR(HEUTE());MONAT(J2);TAG(J2))


Dann das Makro so ändern

    Dim Von As Variant


With Sheets("Tab1")
If .FilterMode Then .ShowAllData ' Autofilter alle
Von = InputBox("Geburtstag von...10.06.")
Von = DateValue(Von & Year(Date))
If IsDate(Von) Then
.Range("AC:AC").AutoFilter Field:=1, Criteria1:=">=" & CLng(Von), _
Operator:=xlAnd, Criteria2:="=" & CLng(Date)
End If
End With



Eingabe= Tag.Monat.
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 17:54:34
Herbert Grom
Hallo Uwe,

vielen Dank für deine Lösung. Doch sei mir bitte nicht böse, aber ich habe mich für onurs Lösung entschieden, da sie ohne Hilfsspalte auskommt.

Servus
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 16:49:47
daniel
Hi
mach ne Hilfsspalte mit der Formel:
=--Text(J2;"MMTT")

dann bekommst du den Geburtstag ohne Jahr, als Zahlenwert in einer Form, in der du Filtern kannst

in die Textbox gibst du dann auch den Ab-Wert in der Form ein MonatTag, dann kannst du in der Hilfsspalte filtern mit:

Criteria1:=">="&Eingabewert
Criteria2:="=" & Format(Date, "MMDD")
Operator:=xlAND

Gruß Daniel
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 17:08:30
Herbert Grom
Hallo Daniel,

vielen Dank für deinen Tipp, doch leider klappt das bei mir nicht. Ich habe die Formel, allerdings ohne die führenden "--" in die Spalte N eingetragen und dort dann die Monats- und Tagesdaten ohne das Jahr erhalten. Dann habe ich diesen Code getestet:

Sub Makro1()

Dim Von As Date

With Sheets("Tab1")
If .FilterMode Then .ShowAllData ' Autofilter alle
Von = InputBox("Geburtstag von...")

If IsDate(Von) Then
.Range("N:N").AutoFilter Field:=2, _
Criteria1:=">=" & Von, Operator:=xlAnd, _
Criteria2:="=" & Format(Date, "MMDD")
End If
End With
End Sub


Dabei filtert er kein einziges Datum. Ich habe extra ein Mindestdatum ("10.06.") gewählt, das auch in der Liste vorhanden ist. Hast du eine Idee woran das liegen kann?

Servus
Geburtstage aus Liste filtern mit Angabe Datum von bis
04.08.2023 21:08:40
Daniel
Da das Datum jetzt Text ist, musst du es in der Form eingeben, in der es auch in der Zelle steht, Monat und Tag, zweistellig ohne Punkte.

318 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige