Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Range.Find findet keine formatierten Zahlen

Range.Find findet keine formatierten Zahlen
16.11.2019 10:36:54
Stefan
Hallo,
die Range.Find - Methode findet einen aus einer Zelle (Value) ausgelesenen Wert in einem Zellbereich nur,
wenn dieser Zellbereich die Standard-Formatierung hat. Die Find-Methode wird mit SearchFormat:=false aufgerufen. Ich suche nach einer Möglichkeit eine Zahl unabhängig vom Ausgabeformat ohne eine zellenweise Loop-Schleife zu finden.
Kann da jemand einen Tip geben ? Bei Suche Datumsformat mit Find hab ich gelesen, dass das nur über LookAt:=xlFormulas funzt. Die Möglichkeit habe ich nicht, da die Zahlen teils mittels Formel errechnet werden.
Grüße
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 10:47:25
Hajo_Zi
frage jemand der neben Dir sitzt der sieht die Datei.
Die meisten hier sehen Sie nicht.
Da Sie nicht auf Deinen Rechner schauen.
Vielleicht sollte die Datei verlinkt werden?
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)
Das ist nur meine Meinung zu dem Thema.
Ich vermute Value ist Text.

Anzeige
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 10:56:38
Stefan
Hallo,
Upload nicht möglich, da riesiges VBA-Projekt.
Ich hoffte, die Frage recht eindeutig gestellt zu haben, ohne dass man sich durch Code wurschteln muss.
Anbei die aufgerufene Funktion:
Private Function FindContent(r As Range, v) As Range
Dim p As Range, k As Range, f As Range
Set f = Nothing
Set p = r.Find(What:=v, LookIn:=xlValues, LookAt:=xlWhole, SearchFormat:=False)
If Not p Is Nothing Then
Set f = p
Set k = p
Do
Set k = r.FindNext(After:=k)
Set f = Union(f, k)
Loop Until k.Address = p.Address
End If
Set findcontet = f
End Function
aufgerufen wird die Funktion mit:
...
LookFor = Selection.Cells(1, 1) ' LookFor ist Variant
...
Set r = FindContent(Intersect(List.DataBodyRange, r.EntireColumn), LookFor)
' Suchbereich ist anwendungsspezifisch
Grüße
Anzeige
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 10:58:44
Hajo_Zi
gut ich schaue nicht auf fremde Rechner um meine Vermutung zu bestätigen. Ich bin dann raus.
Gruß Hajo
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 11:15:57
Stefan
ähm ?
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 11:22:20
Nepumuk
Hallo Stefan,
kannst du nur die Tabelle in der du suchst hochlanden? Zudem brauche ich den genauen Suchbegriff.
Gruß
Nepumuk
Anzeige
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 17:43:39
Stefan
Hallo Nepumuk,
habe das mal als Beispiel in eine kleine Mappe gepackt.
Es wird die gleiche Suchfunktion für einen Bereich mit formatierten Zahlen und Standard (General) benutzt mit unterschiedlichen Ergebnissen. Ich kann auch nicht über eine Textsuche gehen, da Zahlen verschieden formatiert sein könnten.
https://www.herber.de/bbs/user/133256.xlsm
Gruß
Anzeige
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 18:32:20
Nepumuk
Hallo Stefan,
teste mal so:
G
4$B$4

ZelleFormel
G4=suche(B3:B26;F3)

Und dieser Funktion:
Public Function Suche(ByRef probjRange As Range, ByVal pvvntSearchTerm As Variant) As String
    Dim avntValues As Variant
    Dim ialngIndex As Long
    avntValues = probjRange.Value2
    For ialngIndex = LBound(avntValues, 1) To UBound(avntValues, 1)
        If avntValues(ialngIndex, 1) = pvvntSearchTerm Then
            Suche = probjRange.Cells(ialngIndex, 1).Address
            Exit For
        End If
    Next
End Function

das dürfte sogar etwas schneller sein als die Find-Methode da diese nicht zu den schnellsten zählt.
Gruß
Nepumuk
Anzeige
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 19:23:02
Stefan
Danke Nepumuk,
das klappt.
Hätte mir nicht vorstellen können, dass eine VBA-Schleife schneller sein soll als eine Standardroutine.
Abschließende Frage zu deinem Vorschlag:
Der "Umweg" über ein Array ist aus Geschwindigkeitsgründen gewählt ?
Sonst wäre ja auch ein
For Each r in probjRange.Cells
... und Vergleich r.Value mit dem zu suchenden Inhalt denkbar.
LG Stefan
Anzeige
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 19:42:20
Nepumuk
Hallo Stefan,
die Zellen einzeln abzuklappern ist die langsamste Methode. Du musst dir nur im Objektkatalog die Range-Klassen ansehen. Die hat jede Menge Eigenschaften und die müssen ja alle in den Arbeitsspeicher geladen werden auch wenn du nur eine einzige benötigst. In meinem Code wird nur zweimal aus das Range-Objekt zugegriffen. Einmal um die Value2-Eigenschaft zu lesen (das sind die unformatierten Zellwerte) und einmal um die Adresse zurückzugeben. Darum ist das schnell, denn die Array-Funktionen sind in Millisekunden durch. Selbst wenn du eine Liste mit einer Million Einträgen abarbeitest ist es immer noch schneller als die Find-Methode.
Gruß
Nepumuk
Anzeige
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 20:25:04
Stefan
hab vielen Dank, wieder was gelernt :-)
AW: Range.Find findet keine formatierten Zahlen
17.11.2019 07:37:23
Luschi
Hallo Stefan,
oder so:

Public Function Find_1(r As Range, LookFor) As Variant
Dim p As Range, v As Variant
v = Application.Match(LookFor, r, 0)
If IsError(v) Then
Find_1 = "/"
Else
Find_1 = r.Cells(v).Address
End If
End Function
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Range.Find findet keine formatierten Zahlen
16.11.2019 10:50:34
Stefan
Ergänzung:
Suche ich mit Zellbereich.Find( .. LookIn:=xlFormulas ..), findet er die Zahlen, die im Blatt mit Tausenderpunkt und ohne Nachkommastellen formatiert sind. Allerding natürlich nur die direkt eingegebenen Zahlen. Sobald eine Zahl aus einer Formel berechnet wird, findet die Methode diese natürlich nicht in Zelle.Formula. Also bin ich auf LookIn:=xlValues angewiesen, bisher ohne Erfolg.
Der zu suchende Zahlenwert kommt aus Zelle.Value (ohne Formatierung).
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Range.Find: Formatierten Zahlen unabhängig suchen


Schritt-für-Schritt-Anleitung

  1. Öffne dein Excel-Dokument und navigiere zur gewünschten Tabelle.

  2. Aktiviere den VBA-Editor mit ALT + F11.

  3. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei)" > Einfügen > Modul.

  4. Kopiere und füge den folgenden Code ein:

    Private Function FindContent(r As Range, v) As Range
        Dim p As Range, k As Range, f As Range
        Set f = Nothing
        Set p = r.Find(What:=v, LookIn:=xlValues, LookAt:=xlWhole, SearchFormat:=False)
        If Not p Is Nothing Then
            Set f = p
            Set k = p
            Do
                Set k = r.FindNext(After:=k)
                Set f = Union(f, k)
            Loop Until k.Address = p.Address
        End If
        Set FindContent = f
    End Function
  5. Rufe die Funktion auf und übergebe den gewünschten Suchbereich sowie den Suchbegriff. Beispiel:

    Dim LookFor As Variant
    LookFor = Selection.Cells(1, 1)
    Set r = FindContent(Intersect(List.DataBodyRange, r.EntireColumn), LookFor)
  6. Führe den Code aus und überprüfe die Ergebnisse.


Häufige Fehler und Lösungen

  • Fehler: Finden von formatierte Zahlen schlägt fehl
    Lösung: Stelle sicher, dass LookIn auf xlValues gesetzt ist, da dies die Werte der Zellen verwendet, nicht die formatierten Darstellungen.

  • Fehler: Unbekannter Fehler bei der Ausführung
    Lösung: Überprüfe, ob der Suchbereich korrekt definiert ist und ob die Zelle, aus der der Suchbegriff stammt, den richtigen Datentyp hat (z.B. Zahl anstelle von Text).


Alternative Methoden

  • Verwendung von Match-Funktion: Eine schnellere Methode ist die Verwendung der Application.Match-Funktion, um den Index der gesuchten Zahl zu finden:

    Public Function Find_1(r As Range, LookFor) As Variant
        Dim v As Variant
        v = Application.Match(LookFor, r, 0)
        If IsError(v) Then
            Find_1 = "/"
        Else
            Find_1 = r.Cells(v).Address
        End If
    End Function
  • Array-basierte Suche: Nutze Arrays, um die Werte effizient zu durchsuchen, was besonders bei großen Datenmengen schneller ist.


Praktische Beispiele

  • Beispiel 1: Suche nach einer Zahl in einem bestimmten Bereich:

    Dim result As Range
    Set result = FindContent(Sheet1.Range("A1:A100"), 12345)
    If Not result Is Nothing Then
        MsgBox "Wert gefunden in: " & result.Address
    Else
        MsgBox "Wert nicht gefunden."
    End If
  • Beispiel 2: Verwendung von Application.Match:

    Dim address As String
    address = Find_1(Sheet1.Range("B1:B100"), 67890)
    MsgBox "Wert gefunden in: " & address

Tipps für Profis

  • Nutze Value2: Verwende Value2 anstelle von Value, um mögliche Probleme mit Datumsformaten zu vermeiden, da Value2 die Rohdaten ohne Formatierungen zurückgibt.

  • Wenn möglich, reduziere die Anzahl der Zellzugriffe: Versuche, mit Arrays zu arbeiten, um die Geschwindigkeit zu erhöhen, insbesondere bei umfangreichen Daten.

  • Profiling durchführen: Teste verschiedene Methoden, um die schnellste Lösung für deine spezifischen Daten zu finden.


FAQ: Häufige Fragen

1. Warum findet Range.Find keine formatierten Zahlen?
Range.Find sucht nach den Werten, die in den Zellen gespeichert sind. Wenn die Zellen formatiert sind, aber die Werte anders interpretiert werden, kann das zu Problemen führen.

2. Was ist der Unterschied zwischen LookIn:=xlValues und LookIn:=xlFormulas?
xlValues durchsucht die Werte, die in den Zellen angezeigt werden, während xlFormulas die zugrunde liegenden Formeln betrachtet. Bei formatierten Zahlen ist es oft besser, xlValues zu verwenden.

3. Kann ich Find auch für Text verwenden?
Ja, Range.Find kann auch für Text verwendet werden. Achte darauf, die Parameter entsprechend anzupassen, um die Suche zu optimieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige