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

Find - zwei Strings gleichzeitig suchen

Forumthread: Find - zwei Strings gleichzeitig suchen

Find - zwei Strings gleichzeitig suchen
Werner
Hallo Freunde,
Kann ich mit "Find" nach zwei Strings gleichzeitig suchen, z. .B. nach dem
String "abc" in Spalte "A" und nach dem String "def" in Spalte B (angenommen, dass sich die beiden
Strings im gleichen Datensatz befinden)?
Oder muss ich, nachdem eine erste Find-Anweisung "abc" gefunden hat, zuerst die Zelle, in der "abc" steht, mit der Anweisung "Application.Goto" anspringen und von dort aus mit einer zweiten Find-Anweisung nach "def" in Spalte B suchen? Geht es eventuell einfacher als das? Werner R.

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Find - zwei Strings gleichzeitig suchen
02.06.2008 07:25:18
Erich
Hallo Werner,
das geht ohne Select, Application.Goto und zweites Find.
Bei einem Treffer in der ersten Spalte musst du doch nur noch prüfen,
ob in Spalte B der Trefferzeile der 2. gesuchte Wert steht.
Probier mal die beiden Varianten:

Option Explicit
Sub Makro1()
Dim rngF As Range, lngR As Long
Set rngF = Columns(1).Find(What:="abc", _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not rngF Is Nothing Then
lngR = rngF.Row
Do
'        If Cells(rngF.Row, 2) = "def" Then           ' wenn "xlWhole"
If InStr(Cells(rngF.Row, 2), "def") > 0 Then ' wenn "xlPart"
MsgBox "Treffer in Zeile " & rngF.Row
Exit Do                                   ' Ende nach 1. Treffer
Else
Set rngF = Cells.FindNext(rngF)
If rngF Is Nothing Then Exit Do
End If
Loop While rngF.Row > lngR
End If
End Sub
Sub Makro2()
Dim rngF As Range, lngR As Long
Set rngF = Columns(1).Find(What:="abc", _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not rngF Is Nothing Then
lngR = rngF.Row
Do
'        If Cells(rngF.Row, 2) = "def" Then           ' wenn "xlWhole"
If InStr(Cells(rngF.Row, 2), "def") > 0 Then ' wenn "xlPart"
MsgBox "Treffer in Zeile " & rngF.Row
End If
Set rngF = Cells.FindNext(rngF)
If rngF Is Nothing Then Exit Do
Loop While rngF.Row > lngR
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Find - zwei Strings gleichzeitig suchen
Werner
Hallo Erich,
Dank f. deine Antwort!. Bin bin gerade erst wieder zugeschaltet (mir war etwas
dazwischen gekommen). Melde mich heute etwas später wieder,
weil ich deine Antwort erst auswerten muss.
R. Werner

meine Antwort
Werner
Hallo Erich,
soweit ich deinen Code verstehe, läuft er auf folgendes hinaus:
a) Zuerst wird nach dem ersten String, also nach "abc", gesucht.
b) Wenn gefunden, dann schaut der Makro in der Spalte rechts davon nach.
c) Wenn dort "def" gefunden wird, dann meldet die MsgBox einen Treffer
d) Ansonsten wird FindNext eingesetzt (das war für mich die zweite Find-Anweisung). Dann beginnt
die Schleife von neuem und der Makro prüft erneut beide Spalten.
Der zweite Makro macht in etwa dasselbe.
Herzlichen Dank! R. Werner

Anzeige
Danke für Rückmeldung - Alles klar! (owT)
03.06.2008 13:27:07
Erich
;
Anzeige
Anzeige

Infobox / Tutorial

Zwei Strings gleichzeitig in Excel suchen


Schritt-für-Schritt-Anleitung

Um in Excel nach zwei Strings gleichzeitig zu suchen, kannst Du die folgende VBA-Makro-Lösung verwenden. Dieser Ansatz vermeidet die Verwendung von Application.Goto und Select, was die Effizienz erhöht.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke im Menü auf Einfügen und wähle Modul, um ein neues Modul hinzuzufügen.
  3. Kopiere den folgenden Code in das Modul:
Option Explicit
Sub SucheZweiStrings()
    Dim rngF As Range, lngR As Long
    Set rngF = Columns(1).Find(What:="abc", _
                                LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
                                SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    If Not rngF Is Nothing Then
        lngR = rngF.Row
        Do
            If InStr(Cells(rngF.Row, 2), "def") > 0 Then
                MsgBox "Treffer in Zeile " & rngF.Row
                Exit Do
            End If
            Set rngF = Cells.FindNext(rngF)
            If rngF Is Nothing Then Exit Do
        Loop While rngF.Row > lngR
    End If
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Makro über Entwicklertools > Makros aus und wähle SucheZweiStrings.

Dieses Makro sucht nach dem String "abc" in Spalte A und prüft, ob in der entsprechenden Zeile in Spalte B der String "def" vorhanden ist.


Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht gesetzt."

    • Lösung: Stelle sicher, dass Du die Spalte A und B in der richtigen Reihenfolge mit Daten gefüllt hast, da der Code davon ausgeht, dass die Suche in Spalte A beginnt.
  • Fehler: Keine Treffer gefunden.

    • Lösung: Überprüfe, ob die gesuchten Strings "abc" und "def" exakt in den Zellen vorhanden sind. Die Suche ist standardmäßig nicht case-sensitive, es könnte jedoch an der Formatierung der Daten liegen.

Alternative Methoden

Eine alternative Methode ist die Verwendung von Excel-Formeln, um die Suche zu vereinfachen:

  1. Du kannst die Funktion =WENN(UND(A1="abc";B1="def");"Treffer";"") in einer neuen Spalte verwenden, um zu überprüfen, ob beide Bedingungen erfüllt sind.
  2. Diese Formel gibt "Treffer" aus, wenn in Zelle A1 "abc" und in Zelle B1 "def" steht.

Praktische Beispiele

Angenommen, Du hast folgende Daten in Spalte A und B:

A B
abc def
ghi jkl
abc mno
pqr def

Wenn Du das Makro ausführst, wird es "Treffer in Zeile 1" melden, da in der ersten Zeile beide Strings vorhanden sind.


Tipps für Profis

  • Optimiere Deine Suchanfragen, indem Du die Parameter für Find anpasst. Zum Beispiel kannst Du LookAt:=xlWhole verwenden, wenn Du nach ganzen Übereinstimmungen suchst.
  • Erstelle eine Fehlermeldung oder Logik, um die Anzahl der Treffer zu zählen, anstatt nur den ersten Treffer anzuzeigen. Dies kann hilfreich sein, wenn Du mit großen Datenmengen arbeitest.

FAQ: Häufige Fragen

1. Kann ich das Skript anpassen, um nach mehr als zwei Strings zu suchen?
Ja, Du kannst das Skript erweitern, indem Du zusätzliche Bedingungen hinzufügst, um weitere Strings zu überprüfen.

2. Ist dieser Ansatz in allen Excel-Versionen anwendbar?
Die meisten VBA-Funktionen sind in den neueren Excel-Versionen verfügbar. Stelle sicher, dass Du mindestens Excel 2007 oder höher verwendest.

3. Wie kann ich das Makro automatisch bei jedem Öffnen der Datei ausführen?
Füge den Aufruf des Makros in das Workbook_Open Ereignis in ThisWorkbook ein, um das Makro beim Öffnen der Datei auszuführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige