Vba Find-Methode in Excel

Hallo!
Ich durchsuche per VBA eine Range, um eine Zelle mit bestimmten Inhalt zu finden:
x = Date + 5 + 5
Set c = Range(„A1:smiley:9“).Find(x, LookIn:=xlValues)

so weit - so gut: die Zelle wird gefunden, wenn das richtige Datum enthalten ist (angezeigt als „19.04.2010“)

Aber sowie ich das Datum in der Zelle irgendwie formatiere (aktuell brauche ich das Format „T.MMMM“, also z.B „19.April“), so findet der Find-Befehl in keinem Fall die Zelle.

Ich habe schon (bestimmt nicht!) alles ausprobiert - ohne Erfolg. Aber irgendeine Möglichkeit muss es doch geben, um die Zelle zu finden! Bitte: Hilfe-Hilfe-Hilfe

Danke
Wolfram

Set c = Range(„A1:smiley:9“).Find(x, LookIn:=xlValues)
so weit - so gut: die Zelle wird gefunden, wenn das richtige
Datum enthalten ist (angezeigt als „19.04.2010“)

Aber sowie ich das Datum in der Zelle irgendwie formatiere
(aktuell brauche ich das Format „T.MMMM“, also z.B
„19.April“), so findet der Find-Befehl in keinem Fall die
Zelle.

Hallo Wolfram,

T.MMM reicht.

Sub tt()
Dim x As Date, c As Range
x = Date + 10
Set c = Range("A1:smiley:9").Find(x, LookIn:=xlFormulas, lookat:=xlWhole)
If Not c Is Nothing Then MsgBox c.Address
End Sub

Gruß
Reinhard

Hallo Reinhard!
Vielen Dank für die Lösung, es funktioniert. Übrigends: mit T.MMM bekomme ich als Anzeige „19.Apr“, erst mit 4 M wird der Monatsname ausgeschrieben.

vielen Dank
Wolfram

Moin, Reinhard,

T.MMM reicht.

bist Du sicher? Mit dem Ende

 If Not c Is Nothing Then
 MsgBox c
 Else
 MsgBox "nix da"
 End If

sehe ich (Office 2000), dass nur die Formatierung TT.MM.JJJJ flutscht.

Gruß Ralf

hallo Ralf,

T.MMM reicht.

bist Du sicher?

nö, T.MMMM war schon richtig, ich irrte mich.

If Not c Is Nothing Then
MsgBox c
Else
MsgBox „nix da“
End If
sehe ich (Office 2000), dass nur die Formatierung TT.MM.JJJJ
flutscht.

Es liegt daran wie die Daten in die Zellen kommen, schau dir mal die Zellenformatierung in C:smiley: an und wie es dargestellt wird.

Option Explicit

Sub test()
Dim x As Date, c As Range, Erste As String
Range("A1:F10").Clear
Call tt
Call tt2
Call tt3
Call tt4
x = Date + 10
With Worksheets(1).Range("A1:smiley:9")
 Set c = .Find(x, LookIn:=xlFormulas, lookat:=xlWhole)
 If Not c Is Nothing Then
 Erste = c.Address
 Do
 c.Interior.ColorIndex = 34
 Set c = .FindNext(c)
 Loop While Not c Is Nothing And c.Address Erste
 End If
End With
End Sub


Sub tt()
Range("A1").NumberFormat = "d.MMM"
Range("A2").NumberFormat = "d.MMMM"
Range("A3").NumberFormat = "dd.MM.YYYY"
Range("A4").NumberFormat = "YYYYMMDD"
Range("A1").Value = Date + 10
Range("A2").Value = Date + 10
Range("A3").Value = Date + 10
Range("A4").Value = Date + 10
End Sub
'
Sub tt2()
Range("B1").Value = Date + 10
Range("B2").Value = Date + 10
Range("B3").Value = Date + 10
Range("B4").Value = Date + 10
Range("B1").NumberFormat = "d.MMM"
Range("B2").NumberFormat = "d.MMMM"
Range("B3").NumberFormat = "dd.MM.YYYY"
Range("B4").NumberFormat = "YYYYMMDD"
End Sub
'
Sub tt3()
Range("C1").Value = "20.04.2010"
Range("C2").Value = "20.04.2010"
Range("C3").Value = "20.04.2010"
Range("C4").Value = "20.04.2010"
Range("C1").NumberFormat = "d.MMM"
Range("C2").NumberFormat = "d.MMMM"
Range("C3").NumberFormat = "dd.MM.YYYY"
Range("C4").NumberFormat = "YYYYMMDD"
End Sub
'
Sub tt4()
Range("D1").NumberFormat = "d.MMM"
Range("D2").NumberFormat = "d.MMMM"
Range("D3").NumberFormat = "dd.MM.YYYY"
Range("D4").NumberFormat = "YYYYMMDD"
Range("D1").Value = "20.04.2010"
Range("D2").Value = "20.04.2010"
Range("D3").Value = "20.04.2010"
Range("D4").Value = "20.04.2010"
End Sub

Gruß
Reinhard

Moin, Reinhard,

Es liegt daran wie die Daten in die Zellen kommen, schau dir
mal die Zellenformatierung in C:smiley: an und wie es dargestellt
wird.

und was tut dann der arme Hund, der mit Formatierung nach Scheffes Wünschen konfrontiert wird? Formatierung für den Vergleich ändern und dann zurückändern? Das kann ja heiter werden.

Gruß Ralf

ps: Mit dem NumberFormat hast Du mich sauber auflaufen lassen - hat ne ganze Zeit gedauert, bis ich NumberFormatLocal gefunden habe :wink:

Hallo Ralf,

Es liegt daran wie die Daten in die Zellen kommen, schau dir
mal die Zellenformatierung in C:smiley: an und wie es dargestellt
wird.

und was tut dann der arme Hund, der mit Formatierung nach
Scheffes Wünschen konfrontiert wird? Formatierung für den
Vergleich ändern und dann zurückändern? Das kann ja heiter
werden.

echt? Das wäre super, endlich der graue Himmel weg :smile:)

Und der Hund *Schulterzuck*, der isses doch gewöhnt daß ihn sein jefe tritt. Völlig gleich ob er gute Leistungen, er wird getrten damit der Jefe Jefe bleibt.

ps: Mit dem NumberFormat hast Du mich sauber auflaufen lassen

  • hat ne ganze Zeit gedauert, bis ich NumberFormatLocal
    gefunden habe :wink:

Also habe ich zu deiner Weiterbildung beigetragen, ist doch schön :smile:

Und das Grundproblem ist wie immer MS. Wie die mit datümern ugehen ist mir nicht immer verständlich. Ich hab schon nachgelesen wie es zu diesen 1904-Datumswerten kam, hängt mit dem damaligen Marktführer Multiplan zusammen.

Insofern ist das mit 1904 verständlich. Wobei ich das tunlichst vermeide.
Verständlich ist auch daß die Ganzzahl den Tag angeben und die nachkommastellen quasi Stunden, Minuten…

ABER, wenn ich eine Zelle in der 4711 steht, evtl. aus einem Fremdprogramm importiert und als Text eingestuft worden, und ich formatiere diese Zelle als Zahl, dann sollte bitteschön das dann auch eine Zahl werden für Excel.
Und das klappt nicht :frowning: Genauso bei datumsproblemen.

Gruß
Reinhard

Grüezi Reinhard

ABER, wenn ich eine Zelle in der 4711 steht, evtl. aus einem
Fremdprogramm importiert und als Text eingestuft worden, und
ich formatiere diese Zelle als Zahl, dann sollte bitteschön
das dann auch eine Zahl werden für Excel.
Und das klappt nicht :frowning: Genauso bei datumsproblemen.

Excel will halt nach dem Umformatieren den Inhalt nochmals in die Zelle geschrieben haben, was mit den zwie folgenden Abläufen hier noch immer zuverlässig geklappt hat: :smile:

  • Spalte markieren

  • Format: ‚Standard‘ oder ‚Zahl‘ vergeben (auch wenn dies schon der Fall sein sollte)

  • Spelte markiert lassen

  • Menü: ‚Daten‘

  • Text in Spalten

  • [Fertig stellen]

  • Spalte markieren

  • Menü: ‚Daten‘

  • Text in Spalten

  • [x] Getrennt

  • [Weiter >]

  • [Weiter >]

  • Datenformat der Spalten: [x] Datum: [TMJ] (je nach Format des Inhalts)

  • [Fertig stellen]

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -