Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

.Find(what:=..., Lookat:=xlWhole, LookIn:=xlValues) ->Format

Forumthread: .Find(what:=..., Lookat:=xlWhole, LookIn:=xlValues) ->Format

.Find(what:=..., Lookat:=xlWhole, LookIn:=xlValues) ->Format
04.05.2024 10:29:31
Kulo
Hallo liebe Excelianer,

ich suche mit folgendem Code
Monatserster = DateSerial(Year(Date), Month(Date), 1)


Set MonatsSpalte = Worksheets("0").Range("B2:YK2").Find(what:=Monatserster, Lookat:=xlWhole, LookIn:=xlValues)

If IsEmpty(Worksheets("0").Cells(89, MonatsSpalte.Column)) Then

in der zweiten Zeile vom Tabellenblatt "0" ein Datum.
Das funktioniert soweit ganz gut. Jedoch muss diese Zeile im Format "TT.MM.JJ" formatiert sein. Wenn ich das Format "MMM.JJ" auswähle, bekomme ich einen Fehler.
LookIn:=xlValues sind doch die Werte und die sind doch unabhängig vom Format. (?!)
Wo liegt hier mein Fehler?
Gibt es eine bessere Methode, die Spalte mit dem Datumswert zu finden?

Ich würde mich sehr freuen, wenn mir das jemand von euch kurz erläutern könnte.

Vielen Dank schonmal und
viele Grüße

Kulo
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: .Find(what:=..., Lookat:=xlWhole, LookIn:=xlValues) ->Format
04.05.2024 10:38:19
ralf_b
datum ist excel-intern eine Zahl und die kannst du z.b. what: cdbl(dein datum) finden.
find() ist für Datumssuche eher schwierig.
find() gibt die Zelle absolut im Blatt zurück auch wenn dein Bereich sich nicht direkt an den Blattgrenzen befindet. Hier wäre dann ein Versatz zu berücksichtigen.

Ich nutze für Spalten- und Zeilenverweise meist vergleich() bzw match(). für mich von Vorteil da man die relative Nummer der Zelle im Suchbereich zurückbekommt.
zb. in einer intelligenten Tabelle gebe ich den Datenbereich als Suchbereich an und bekomme die Zeilennummer zurück, die ich direkt als Index für Listrow oder ListColumn verwenden kann.
Anzeige
AW: .Find(what:=..., Lookat:=xlWhole, LookIn:=xlValues) ->Format
04.05.2024 10:50:50
Beverly
Hi Kulo,

bei der Suche nach einem Datum mittels Find-Methode ist Excel ein wenig "eigen" - normalerweise würde man ja logischerweise bei dem Parameter LookIn den Wert, also xlValues (so wie in deinem Code) annehmen, wenn das Datum als fixer Wert in der Zelle steht. Aber unlogischerweise solltest du es mal mit xlFormulas als Parameter versuchen - das hilft in vielen Fällen. Aber generell ist es - so wie Ralf schon geschreiben hat - bei einer Datumssuche günstiger die Application.Match-Methode analog der VERGLEICH-Formel zu verwenden.

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
Vielen Dank
04.05.2024 11:05:01
Kulo
Hallo Karin, hallo Ralf,

vielen Dank für eure Denkanstöße.

Ich werde mir die Application.Match-Methode mal genauer anschauen.
Außerdem denke ich, dass ich mich nochmal mit den CDate und CDbl Eigenschaften befassen sollte. Ich hab so das Gefühl, dass ich da so einiges außer Acht gelassen habe.

Vielen Dank nochmal und ein schönes Wochenende.

Viele Grüße

Kulo
Anzeige
AW: Vielen Dank
04.05.2024 12:08:10
Daniel
Hi
Wie Karin schon schrieb, .Find ist etwas eigen.
So sucht LookIn:=xlValues nicht in den unformatierten Zellwerten, sondern in den formatierten Zelltexten.
Erschwerend kommt hinzu, dass man bei bestimmten Formatierungen den Suchwert nicht so wie angezeigt angeben muss, sondern im vergleichbaren amerikanischen Format. Alternativ mit xlFormulas zu suchen funktioniert auch nur dann, wenn das Datum als Konstante in der Zelle steht und nicht per Formel berechnet wird.

Wenn man einen regelmäßigen Kalender hat, dh alle Tage sind sortiert und im gleichen Abstand vorhanden, kann man die Position eines Datums auch berechnen, da ein Tag dem Wert 1 entspricht und die Datumswerte auch nur Zahlen sind und Beginnend am 1.1.1900 jeden Tag um +1 hochgezählt werden

Spalte = StartSpalte + Datum - StartDatum

Bzw wenn du für einen Tag mehrere Spalten verwendest

Spalte = StartSpalte + (Datum - StartDatum)* Abstand

Gruß Daniel

Anzeige
Meine Lösung
04.05.2024 13:39:27
Kulo
Hallo nochmal,

ich habe jetzt
MonatsSpalte = Application.Match(CDbl(DateSerial(Year(Date), Month(Date), 1)), Worksheets("0").Range("B2:YK2"), 0)

zusammengebastelt.

Ob das jetzt der Weisheit letzter Schluss ist ? ...
Aber es macht, was es soll.

Vielen Dank nochmal für die vielen Denkanstöße

Viele Grüße

Kulo
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige