Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1580to1584
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

Suche in Substring von Datumsangaben

Suche in Substring von Datumsangaben
18.09.2017 13:24:45
Datumsangaben
Ich habe eine datumsbezogene Tabelle.
Die Einträge sind fortlaufed. Da es inzwischen eitliche sind, möchte ich bis zu einem bestimmten Monat alle vorherigen ausblenden.
Dazu möchte ich beispielsweise im Datum ".08." suchen, um den ersten Datensatz im August zu finden. Ausgabe ist dann die Zeilennummer.
Ich dachte mir das so:

zeile = Columns("B:B").Find(What:=monat, _
lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
If zeile Is Nothing Then Exit Sub

In der normalen Suche im Tabellenblatt klappt das. Im Code habe ich auch schon "/08/" versucht, aber das klappt alles nicht zuverlässig.
Dazu kommt, dass die Sache immer mit Codefehler anschmiert, wenn er nichts findet.
Muss man echt per loop alle Zellen absuchen? Oder gibt es eine einfachere Lösung?
Vielen Dank schon Mal!

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Find - Monat in Datumsangaben
18.09.2017 13:44:04
Gerd
Hallo Gerhard!
Sub teste_mal()
Dim Zelle As Range, zeile As Long
Dim monat as string
monat= "08"
Set Zelle = Columns("B:B").Find(What:=monat, LookIn:=xlValues, _
lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row
If Zelle Is Nothing Then
MsgBox "nix"
Else
zeile = Zelle.Row
MsgBox zeile
End If
End Sub
Eine Schleife ist kaum notwendig. Besser wäre es, anhand deiner Beispieltabelle zu coden.
Gruß Gerd
AW: Find - Monat in Datumsangaben
19.09.2017 09:14:54
Gerhard
Ich habe mal vermutet, dass ".Row" am Ende der Suche nicht ganz stimmt. Wenn ich es aber weg lasse, bleibt "Zelle" immer leer?
Ersetze ich es durch "Range", gibt es "Objektvariable nicht festgelegt" oder "ungültige Zuweisung einer Eigenschaft". Auch komisch.
Zuem muss ich ja nach ".08." oder "/08/" suchen, da ich das erste verwendete Datum im August ja nicht kenne. Und das findet er nicht zuerlässig. Da müsste ich vermutlich die in der anderen Antwort vorgeschlagene Hilfsspalte verwenden.
Nur: wieso klappt es im Code nicht, aber bei der "normalen" Suche im Frontend schon?
Anzeige
AW: Find - Monat in Datumsangaben
19.09.2017 09:26:07
Gerd
Hallo Gerhard,
die Find-Methode auf Datum ist kippelig.
Lade bitte eine Beispieltabelle, die deinem Original entspricht, hoch.
So kann man nur vermuten, welche Ursachen den/die Fehler auslösen.
Gruß Gerd
AW: Suche in Substring von Datumsangaben
18.09.2017 17:18:09
Datumsangaben
Hi
ein Datum ist für Excel eine fortlaufende Zahl, die Zählung beginnt mit 1 am 1.1.1900 und wird dann jeden Tag um 1 hochgezählt (dh heute haben wir irgendwas mit 42.000)
Da ist es natürlich schwer, mit normalen Text-Suchmethoden den Monat zu finden.
Wenn deine Liste aufsteigend sortiert ist, könntest du Worksheetfunction.Match verwenden:
Zeile = Worksheetfunction.Match(CLng(CDate("31.07.2017")), Columns(2), 1) + 1
wenns nur ums Ausblenden geht, könntest du auch den Autofilter verwenden.
Der Autofilter braucht aber das Datum in Amerikanischer Schreibweise, um es korrekt auflösen zu können.
... Criteria1:=">=08/01/2017" ...
Wenn du mit deiner Methode arbeiten wollest, müsstest du eine Hilfsspalte einfügen, in welcher _ du das Datum aus Spalte B in einen Text wandelst, hierzu könntest du die Formel:

=Text(B1;"TT.MM.JJJJ") 
verwenden.
in dieser Spalte kannst du dann deine Suchmethode anwenden, weil dort das Datum ein echter Text ist und keine umformatierte Zahl.
Gruß Daniel
Anzeige
AW: Suche in Substring von Datumsangaben
19.09.2017 09:06:02
Datumsangaben
Das mit "Match kannte ich nicht - ist interessant, aber in orliegenden Fall nicht anwendbar, da ich das genaue Datum nicht kenne (das erste erwendete Datum im Monat August).
Die Hilfsspalte ist vermutlich eine Lösung, wenn auch eine verzweifente ;-)
AW: Suche in Substring von Datumsangaben
19.09.2017 09:25:19
Datumsangaben
HI
Worksheetfunction.Match entspricht der Excelfunktion Vergleich.
Wenn die Liste sortiert ist, kannst du damit auch nach nicht vorhandenen Zwischenwerten suchen.
(hierzu muss der 3. Parameter = 1 gesetzte werden)
In diesem Fall gibt dir die Funktion die Zeilennummer des nächstkleineren Wertes aus.
Wenn du damit nach dem letzten Juli-Datum suchst und zum Ergebnis 1 hinzuaddierst, müsstest du auf dem ersten vorhandenen Augustdatum sein.
aber wie gesagt, die Liste muss nach dem Datum aufsteigend sortiert sein, damit das funktioniert.
Gruß Daniel
Anzeige
AW: Suche in Substring von Datumsangaben
19.09.2017 09:54:23
Datumsangaben
Hi
das Suchen mit .Find in Datumswerten ist sehr tricky.
in VBA muss dann bei der Suche das Datum im amerikanischen Format angegeben werden, dh mit "/" als Trennzeichen.
Im Standard-Datumsformat ist zu beachten, dass der Monat an erster Stelle steht (das Standardformat ist das, welches in der Formatliste mit * gekennzeichnet ist)
In speziellen Datumsformaten ist die Reihenfolge von Tag/Monat/Jahr wie vom Format vorgegeben.
es gibt also einiges zu beachten und der Code ist ggf an die vom Anwender eingestellte Formatierung anzupassen.
Formatunanbhängig wäre die schon vorgestellte Suche mit .Match, welche aber eine Sortierung erfordert.
eine alternative Methode wäre eine selbst programmierte Suchschleife:
dim Zelle as Range
for each Zelle in Range("B:B").SpecialCells(xlcelltypeconstants, 1)
if Month(Zelle.Value) = 8 Then
i = Zelle.Row
Exit for
end if
next
Gruß Daniel
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige