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

Find-Methode (Rückgabewert)

Forumthread: Find-Methode (Rückgabewert)

Find-Methode (Rückgabewert)
12.09.2002 17:18:26
Oliver
Hallo,
ich möchte den Rückgabewert einer Suche überprüfen, wenn nichts gefunden wird, soll ein bestimmert Programmteil ausgeführt werden.

Hier mein Vorschlag, der nicht funktioniert:

Do While Worksheets("Hallo").Find(What:="=MID(Text,1,intLang)", LookIn:=xlValues) <> Nothing

intLang = intLang - 1

Loop

Die Fehlermeldung erscheint bei "Nothing", was ich nicht verstehe, da laut Hilfe die Find-Methode eben "Nothing" zurückgibt, wenn sie nichts findet.

Jemand ne Idee?

:O)liver

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Find-Methode (Rückgabewert)
12.09.2002 17:42:54
Jürgen
Hallo Oliver.

Ich glaube da sind zwei Probleme in den Zeilen.
Zum einen sollte die Suche in einem Range passieren, dann sieht das so aus:

Do While Not (Worksheets("Hallo").Cells.Find( _
What:="=MID(Text,1,intLang)", LookIn:=xlValues) Is Nothing)
intLang = intLang - 1
Loop

Dann solltest du jedoch beachten, daß die Find-Methode kreiselt, d.h., daß sie nach der zuletzt gefundenen Zelle wieder von vorne mit der Suche beginnt. Hierzu die Zeilen aus der Hilfe:

Ich hoffe, daß das hilft.

Gruß
Jürgen

Anzeige
Re: Find-Methode (Rückgabewert)
12.09.2002 19:48:40
Hajo_Zi
Hallo Oliver

ich löse suchen meist nach folgenden Prinzip

Gruß Hajo

Re: Find-Methode (Rückgabewert)
13.09.2002 09:30:24
Oliver
Hi Hajo,

Ich erhalte, wenn ich Deinen Makro aus Deiner Antwort ausführe einen Laufzeitfehler '40036', und zwar bleibt mir das Makro in der Zeile "Set Bereich = ..." stehen.

Oliver

Re: Find-Methode (Rückgabewert)
13.09.2002 16:20:43
Hajo_Zi
Hallo Oliver

das kann aber nicht an dem Makro liegen, das läuft fehlerfrei.

Hat Deine Tabelle den Namen "Adressen"??

Oder hast Du nicht das Original Makro genommen???#

Wie sieht Dein Makro dann jetzt aus???

Gruß Hajo

Anzeige
Re: Find-Methode (Rückgabewert)
13.09.2002 17:18:18
Oliver
Tja, ähh, also...

Den Tabellennamen hab ich auf meinen angepasst, und ja, ich habe das Original hier aus dem Forum rauskopiert und bei mir eingefügt.
Wie mein Makro jetzt aussieht? Zumindest funktioniert es, bin aber noch mitten am enwickeln, hier mal ein Zwischenstand:

Sub Suchabgleich()
'
' SuchAbgleich Makro
' Makro am 12.09.02 von Oliver aufgezeichnet
'
' Tastenkombination: Strg+Umschalt+S
'

' Variablendeklaration:
Dim Zelle As Variant ' Zellenadresse
Dim intLang As Long ' Länge einer Nummer (Stellenanzahl)
Dim zaehler As Long ' Zählvariable für Schleifendurchgänge
Dim xGesucht As Variant ' Vorwahl
Dim xZwischen As Variant ' Nummer komplett im long-Format
Dim xKopf As Variant ' Kopfnummer
Dim Ergebnis As Variant ' Ergebnisvariable, in der die Ausgabenummer gespeichert wird
Dim Bereich As Range ' Range zum definieren von Suchspalten, -bereichen etc.
Dim suchBereich As Variant ' Bereichadresse zur Einschränkung des Suchbereichs


' Aufbereitung der Ausgangsdaten
'
' Länderkennzeichen und Telefonnummer werden verknüpft

zaehler = 3

Do
Zelle = "$C$" + Mid(Str(zaehler), 2, Len(Str(zaehler) - 1))
Sheets("Ausgangsdaten").Range(Zelle).Activate
ActiveCell.Value = ActiveCell.Offset(0, -2).Value & Mid(Str(ActiveCell.Offset(0, -1).Value), 2, Len(Str(ActiveCell.Offset(0, -1).Value) - 1))
zaehler = zaehler + 1
Loop While ActiveCell.Value <> "0"

ActiveCell.Value = Null

' Vergleich
'
'


' Suche
'
' Ausgangsnummer + Länderkennzeichen werden so lange um eine Stelle verkürzt,
' bis eine Vorwahl gefunden wird.

zaehler = 3

Do
Zelle = "$D$" + Mid(Str(zaehler), 2, Len(Str(zaehler) - 1))
Sheets("Ausgangsdaten").Range(Zelle).Activate
intLang = Len(ActiveCell.Offset(0, -1).Value)
xGesucht = Mid(ActiveCell.Offset(0, -1).Value, 1, intLang)
xZwischen = xGesucht
If xGesucht = "" Then Exit Sub

Select Case Mid(xGesucht, 1, 2)
Case "AT"
suchBereich = "E2:E2497"
Case "BE"
suchBereich = "E2498:E2556"
Case "CH"
suchBereich = "E2557:E2620"
Case "DE"
suchBereich = "E2621:E7879"
Case "DK"
suchBereich = "E7880:E7888"
Case "ES"
suchBereich = "E7889:E7982"
Case "FI"
suchBereich = "E:E"
Case "FR"
suchBereich = "E:E"
Case "GB"
suchBereich = "E:E"
Case "IE"
suchBereich = "E:E"
Case "IT"
suchBereich = "E:E"
Case "LU"
suchBereich = "E:E"
Case "NL"
suchBereich = "E:E"
Case "NO"
suchBereich = "E:E"
Case "PT"
suchBereich = "E:E"
Case "SE"
suchBereich = "E:E"
End Select

Sheets("Referenz").Activate

With Worksheets("Referenz")
Set Bereich = Range(suchBereich).Find(What:=xGesucht, LookIn:=xlValues)
Do While (Bereich Is Nothing) And (xGesucht <> "")
intLang = intLang - 1
xGesucht = Mid(xGesucht, 1, intLang)
Set Bereich = Range(suchBereich).Find(What:=xGesucht, LookIn:=xlValues)
Loop
End With

zaehler = zaehler + 1

' Formatierte Ausgabe der Vorwahl in Ergebnisvariable
'
' Gefundene Vorwahl wird ohne Länderkennzeichen ausgegeben.
' Format: "(0" + Nummer ohne Länderkennzeichen + ")"
' Außer: Länderkennzeichen ist ES, IT oder SE, dann
' "(" + Nummer ohne Länderkennzeichen + ")"

Sheets("Ausgangsdaten").Activate
intLang = Len(xGesucht) - 2
If intLang <= 0 _
Then Ergebnis = "Keine Vorwahl gefunden!!!" _
Else Select Case Mid(xGesucht, 1, 2)
Case "ES", "IT", "SE"
Ergebnis = "(" & Mid(xGesucht, 3, intLang) & ")"
Case Else
Ergebnis = "(0" & Mid(xGesucht, 3, intLang) & ")"
End Select


' Range(Zelle).Value = Ergebnis & Mid(xZwischen, intLang + 3, Len(xZwischen) - intLang - 2)

Loop While Zelle <> ""

End Sub

Anzeige
Re: Find-Methode (Rückgabewert)
13.09.2002 17:22:51
Hajo_Zi
Hallo Oliver

ohne Dein Makro durchzuarbeiten würde ich sagen da fehlt ein punkt

Set Bereich = .Range(suchBereich).Find(What:=xGesucht, LookIn:=xlValues)

Gruß Hajo

Re: Find-Methode (Rückgabewert)
13.09.2002 17:35:13
Oliver
Hallo Hajo,

*grins* funktioniert mit und ohne Punkt, frag mich nicht wieso.
Dafür war ne if-anweisung verkehrt, hab ich berichtigt.

Klappt bislang alles wunderbar, wenn's Probleme gibt, wo ich nicht weiterkomme, melde ich mich wieder.

Vielen Dank erstmal!!!

Grüsse,

:O)liver

Anzeige
Re: Find-Methode (Rückgabewert)
13.09.2002 17:38:48
Hajo_Zi
Hallo Oliver

es hat mit und ohne Punkt funktioniert weil das Tabellenblatt von With gerade das aktive war. Die With Anweisung wird ja verwendet um nicht ein Select auf die Tabelle zu machen.

Gruß Hajo

Anzeige

Infobox / Tutorial

Rückgabewert der Find-Methode in Excel VBA verstehen und nutzen


Schritt-für-Schritt-Anleitung

  1. Vorbereitung: Stelle sicher, dass Du die richtige Tabelle in Excel geöffnet hast, auf der Du die Find-Methode anwenden möchtest.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Modul erstellen: Füge ein neues Modul hinzu, indem Du mit der rechten Maustaste auf "VBAProject (DeineDateiName)" klickst und dann auf "Einfügen" > "Modul".

  4. Code einfügen: Verwende den folgenden Beispielcode, um die Find-Methode korrekt zu implementieren:

    Sub Suche()
       Dim Bereich As Range
       Dim Suchwert As String
       Dim intLang As Long
    
       Suchwert = "DeinSuchwert" ' Hier den Suchwert eingeben
       intLang = 10 ' Beispiel für die Länge
    
       With Worksheets("DeinBlattname")
           Set Bereich = .Cells.Find(What:=Mid(Suchwert, 1, intLang), LookIn:=xlValues)
           If Bereich Is Nothing Then
               MsgBox "Wert nicht gefunden!"
           Else
               MsgBox "Wert gefunden in: " & Bereich.Address
           End If
       End With
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler 40036: Dieser Fehler tritt auf, wenn die Find-Methode nicht korrekt verwendet wird. Achte darauf, dass Du den richtigen Bereich angibst und die Syntax korrekt ist, wie in den obigen Beispielen gezeigt.

  • VBA Find Nothing: Wenn der Rückgabewert Nothing ist, bedeutet dies, dass der gesuchte Wert nicht gefunden wurde. Stelle sicher, dass der Suchwert korrekt ist und im angegebenen Bereich existiert.

  • Loop-Fehler: Wenn Du eine Schleife mit Do While verwendest, stelle sicher, dass der Abbruchbedingungen klar definiert sind, um eine unendliche Schleife zu vermeiden.


Alternative Methoden

  • Verwendung von FindNext: Wenn Du mehrere Vorkommen eines Wertes finden möchtest, kannst Du die FindNext-Methode verwenden. Diese Methode kann in einer Schleife eingesetzt werden, um alle Vorkommen zu finden.

    Set Bereich = .Cells.Find(What:=Suchwert, LookIn:=xlValues)
    If Not Bereich Is Nothing Then
       firstAddress = Bereich.Address
       Do
           ' Hier kannst Du etwas mit dem gefundenen Bereich machen
           Set Bereich = .Cells.FindNext(Bereich)
       Loop While Not Bereich Is Nothing And Bereich.Address <> firstAddress
    End If
  • Filter anstelle von Find: In manchen Fällen kann es sinnvoll sein, die Filterfunktion von Excel zu nutzen, anstatt VBA zu verwenden, insbesondere wenn Du nur nach sichtbaren Zellen suchst.


Praktische Beispiele

  1. Suche und Rückgabe: Verwende die Find-Methode, um einen Wert in einem bestimmten Bereich zu suchen und die Adresse der Zelle zurückzugeben.

  2. Dynamische Suche: Wenn Du eine Liste hast, kannst Du die Länge dynamisch anpassen, um mehrere Suchen hintereinander auszuführen.

  3. Kombination mit If-Anweisungen: Kombiniere die Find-Methode mit If-Anweisungen, um spezifische Aktionen auszuführen, wenn ein Wert gefunden oder nicht gefunden wird.


Tipps für Profis

  • Optimierung der Suche: Wenn Du viele Daten durchsuchen musst, stelle sicher, dass der Suchbereich so klein wie möglich ist, um die Leistung zu verbessern.

  • Error Handling: Implementiere eine Fehlerbehandlung in Deinem Code, um unerwartete Fehler abzufangen und den Workflow nicht zu unterbrechen.

  • Benutzerdefinierte Suchfunktionen: Erstelle eigene Funktionen, die spezifische Suchkriterien oder -methoden implementieren, um flexibler bei der Datensuche zu sein.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine Find-Methode immer funktioniert? Achte darauf, dass der Suchwert und der Suchbereich korrekt definiert sind. Verwende die korrekte Syntax, wie im Beispiel gezeigt.

2. Was kann ich tun, wenn ich den Fehler 40036 erhalte? Überprüfe die Zeile, in der der Fehler auftritt. Achte darauf, dass Du die Find-Methode korrekt in einem Range-Objekt aufrufst und dass der Suchbereich existiert.

3. Wie kann ich mehrere Werte gleichzeitig suchen? Verwende eine Schleife zusammen mit FindNext, um alle Vorkommen eines Wertes in einem bestimmten Bereich zu finden.

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