Excel XP

25/03/2010 - 22:57 von Günter Flohr | Report spam
Hallo zusammen,
Ich habe ein Problem in VBA mit der Find-Methode auf ein Range-Objekt.

Code-Auszug:
With ActiveSheet.Range(strSpiel)
Set c = .Find(Wert, LookIn:=xlValues, LookAt:=xlWhole,
MatchByte:=False, SearchFormat:=False)


Das Range enthàlt u.A. Zellen mit den Werten 13,00 und 13,60

Wenn z.B. nach der Zelle mit Wert von 13,00 gesucht wird wird nur die Zelle
mit dem Wert 13,60 gefunden.
Was kann ich tun, damit auch der Wert 13,00 gefunden wird?

Wer kann mir helfen?

Vielen Dank und Gruß
indi35
 

Lesen sie die antworten

#1 Peter Schleif
26/03/2010 - 07:13 | Warnen spam
Günter Flohr schrieb am 25.Mrz.2010 22:57 Uhr:

With ActiveSheet.Range(strSpiel)
Set c = .Find(Wert, LookIn:=xlValues, LookAt:=xlWhole,
MatchByte:=False, SearchFormat:=False)

Wenn z.B. nach der Zelle mit Wert von 13,00 gesucht wird wird nur die Zelle
mit dem Wert 13,60 gefunden.
Was kann ich tun, damit auch der Wert 13,00 gefunden wird?



theoretisch: LookAt:=xlPart und .FindNext, praktisch: gar nichts

.Find ist für die Suche nach Zahlen völlig ungeeignet, weil es
Text-Vergleiche durchführen. Du könntest also theoretisch LookAt:=xlPart
setzen und nach "13," suchen. Das würde dann zwar 13,00 und 13,60
finden; aber eben auch 56713,1234

Dazu kommt die Problematik der Formatierung. Bei LookAt:=xlWhole muss
der gesuchte Text exakt die Formatierung der Zelle treffen 13,0 ist
nicht gleich 13,00. Des weiteren die (IMHO) umstàndliche Anwendung von
.FindNext.

Mit einer kleinen For-Next-Schleife bis Du wesentlich flexibler und der
Code ist auch nicht lànger als mit .FindNext. Notfalls können sehr große
Such-Bereiche (zur Verbesserung der Performance) auch zuerst in ein
Daten-Array eingelesen werden.

Peter

Sub ZahlFinden()
Const strSpiel As String = "E1:E20"
Dim r As Range

For Each r In ActiveSheet.Range(strSpiel)
r.Interior.ColorIndex = xlNone
If r.Value = 13 Or r.Value = 13.6 Then r.Interior.ColorIndex=3
Next
End Sub

Ähnliche fragen