131 Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

ich möchte mittels Datumseingabe in ein Textfeld einer Userform aus einer Liste die Datensätze auswählen, die das Suchdatum enthalten. Mit vollständigem Datum klappt das ja auch ganz gut. Ich möchte aber ggf. auch nur den Monat und/oder das Jahr als Suchkriterium eingeben und mir dann die entsprechenden Sätze selektieren. Hat jemand einen Tipp wie man die Suchabfrage "variabel" coden kann, so dass alle Möglichkeiten berücksichtigt werden?

Danke und Gruß A.

2 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Andreas,

am einfachsten ist es natürlich, du machst in deine Userform 3 Textfelder für gesuchten Tag, Monat und Jahr.

Suchst du z.B. nur den Monat und das Jahr, schreibst du nur in diese Textboxen etwas herein.

Du musst dann für die einzelnen Suchbedingungen (ganzes Datum, nur Monat und Jahr, nur Monat) entsprechende Schleifen programmieren.

Hier mal ein Beispiel (das Datum steht in Spalte A ab Zeile 2, alle Zeilen, die nicht den ausgewählten Suchkriterien entsprechen werden ausgeblendet:

Private Sub CommandButton1_Click()

Dim intTag As Integer
Dim intMonat As Integer
Dim intJahr As Integer
Dim lngLetzte As Long
Dim lngZeile As Long

'letzte Zeile im aktuellen Tabellenblatt in Spalte A suchen
lngLetzte = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

If TextBox1.Value <> "" Then
   intTag = CInt(TextBox1.Value)
  Else
   intTag = 0
End If
 
If TextBox2.Value <> "" Then
  intMonat = CInt(TextBox2.Value)
 Else
  intMonat = 0
End If

If TextBox3.Value <> "" Then
  intJahr = CInt(TextBox3.Value)
 Else
  intJahr = 0
End If

'ganzes Datum suchen
If intTag > 0 And intMonat > 0 And intJahr > 0 Then
  For lngZeile = 2 To lngLetzte
     'alle Zellen ausblenden, die nicht dem gesuchten Datum entsprechen
     If Cells(lngZeile, 1).Value <> DateSerial(intJahr, intMonat, intTag) Then Rows(lngZeile).EntireRow.Hidden = True
  Next lngZeile
End If

'nur Monat und Jahr suchen
If intTag = 0 And intMonat > 0 And intJahr > 0 Then
  For lngZeile = 2 To lngLetzte
    'alle Zellen ausblenden, die nicht dem gesuchten Monat und Jahr entsprechen
    If Month(Cells(lngZeile, 1)) <> intMonat Or Year(Cells(lngZeile, 1)) <> intJahr Then Rows(lngZeile).EntireRow.Hidden = True
  Next lngZeile
End If

'nur Monat suchen
If intTag = 0 And intMonat > 0 And intJahr = 0 Then
  For lngZeile = 2 To lngLetzte
    'alle Zellen ausblenden, die nicht dem gesuchten Monat entsprechen
    If Month(Cells(lngZeile, 1)) <> intMonat Then Rows(lngZeile).EntireRow.Hidden = True
  Next lngZeile
End If

'Userform schließen
Unload Me

End Sub

Gruß

M.O.

0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo M. O.
Danke für deinen Tipp und vor allem, dass du gleich den Code mitgeliefert hast. Das löst mein Problem.
Viele Grüße A
...