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

Forumthread: String suchen - VBA

String suchen - VBA
Klaus
Meine sehr geschätzten EXCEL-Gurus!
Wieder einmal wende ich mich, und zwar mit folgender Bitte an euch:
Ich verwalte meine Jazz-CD's in einer, wie sollte es auch anders sein, EX-Tabelle.
Eine ziemlich simple Tabelle - Zeile 1 dient als Kopfzeile - in den darauffolgenden ca. 8.000 Zeilen werden die CD-bezogenen Daten, nach Band-Leader alphabetisch sortiert, verwaltet.
Die Band-LEADER stehen in Spalte B.
Ich bräuchte nun ein Makro, dass z.B. über Eingabe eines Strings in eine InputBox nach Band-Leader sucht und je nach Eingabe den gesuchten Bereich unter die fixierte Kopfzeile scrollt.
Konkret bedeutet dass:
Ich möchte nach einem "Band-Leader" suchen - wichtig dabei erscheint mir, darauf hinzuweisen, dass die "Suche" sozusagen nach dem Suchmodus "Beginnt mit" (wie beim Autofilter/Benutzerdefiniert) durchgeführt werden soll.
Beispiel: Ich suche nach "perez danilo"
In die InputBox trage ich z.B. "pere" ein - das Makro soll nun die 1. Zeile, die in Spalte B mit "pere" beginnt suchen und diese Zeile unter die Kopfzeile scrollen.
Falls mir jemand den erforderlichen Code zur Verfügung stellen kann - vorab 1000 Dank.
Liebe Grüße aus Linz an der Donau / Austria
Klaus
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: String suchen - VBA
09.11.2010 21:49:33
fcs
Hallo Klaus,
hier mein Makro-Vorschlag.
Falls noch nicht geschehen, dann zusätzlich das Fenster unterhalb der Zeile 1 fixieren.
Gruß
Franz
Sub FindBandLeader()
Dim wks As Worksheet, rGefunden As Range, vFind As Variant, sFirstAddress As String
Dim bEinzig As Boolean
Const sMsgTitel As String = "Bandleader suchen"
vFind = InputBox(Prompt:="Anfangsbuchstaben des Bandleader-Namens:", Title:=sMsgTitel)
If vFind = "" Then Exit Sub
Set wks = ActiveSheet
With wks
bEinzig = True
Set rGefunden = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).Find( _
what:=vFind & "*", After:=.Cells(1, 2), LookIn:=xlValues, lookat:=xlPart)
If rGefunden Is Nothing Then
MsgBox "Kein Eintrag zu """ & vFind & """ gefunden.", vbInformation + vbOKOnly, _
sMsgTitel
Else
sFirstAddress = rGefunden.Address
Do
With rGefunden
ActiveWindow.ScrollRow = .Row
.Select
End With
Set rGefunden = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).FindNext( _
After:=rGefunden)
If sFirstAddress = rGefunden.Address Then
MsgBox IIf(bEinzig = True, "Einzige Fundstelle", "Letzte Fundstelle"), _
vbInformation + vbOKOnly, sMsgTitel
Exit Do
End If
bEinzig = False
Loop Until MsgBox("Weiter suchen?", vbQuestion + vbOKCancel, sMsgTitel) = vbCancel
End If
End With
Set rGefunden = Nothing: Set wks = Nothing
End Sub

Anzeige
AW: String suchen - VBA
10.11.2010 16:01:29
Klaus
Servus Franz!
Ich verneige mich - Besten Dank - genau das, was ich gesucht hab.
Ein Dankeschön auch den Anderen
LG
Klaus
AW: String suchen - VBA
09.11.2010 21:53:05
Case
Hallo,
eventuell ist auch das eine Alternative für dich:
Address - Filter - Find...
Servus
Case

Anzeige
AW: String suchen - VBA
10.11.2010 00:45:33
Peter.H
Hallo Klaus
hier noch eine weitere Möglichkeit...
https://www.herber.de/bbs/user/72223.xls
Gruß
Peter
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

String suchen in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um in Excel nach einem Teilstring zu suchen, kannst du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub FindBandLeader()
       Dim wks As Worksheet, rGefunden As Range, vFind As Variant, sFirstAddress As String
       Dim bEinzig As Boolean
       Const sMsgTitel As String = "Bandleader suchen"
       vFind = InputBox(Prompt:="Anfangsbuchstaben des Bandleader-Namens:", Title:=sMsgTitel)
       If vFind = "" Then Exit Sub
       Set wks = ActiveSheet
       With wks
           bEinzig = True
           Set rGefunden = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).Find( _
               what:=vFind & "*", After:=.Cells(1, 2), LookIn:=xlValues, lookat:=xlPart)
           If rGefunden Is Nothing Then
               MsgBox "Kein Eintrag zu """ & vFind & """ gefunden.", vbInformation + vbOKOnly, _
               sMsgTitel
           Else
               sFirstAddress = rGefunden.Address
               Do
                   With rGefunden
                       ActiveWindow.ScrollRow = .Row
                       .Select
                   End With
                   Set rGefunden = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).FindNext( _
                       After:=rGefunden)
                   If sFirstAddress = rGefunden.Address Then
                       MsgBox IIf(bEinzig = True, "Einzige Fundstelle", "Letzte Fundstelle"), _
                       vbInformation + vbOKOnly, sMsgTitel
                       Exit Do
                   End If
                   bEinzig = False
               Loop Until MsgBox("Weiter suchen?", vbQuestion + vbOKCancel, sMsgTitel) = vbCancel
           End If
       End With
       Set rGefunden = Nothing: Set wks = Nothing
    End Sub
  4. Schließe den VBA-Editor und kehre zur Excel-Tabelle zurück.

  5. Drücke ALT + F8, wähle FindBandLeader und klicke auf Ausführen.

  6. Gib den gesuchten Teilstring in das Eingabefeld ein und bestätige.


Häufige Fehler und Lösungen

  • Fehler: Es wird keine Zeile gefunden, obwohl sie existiert.

    • Lösung: Stelle sicher, dass der Suchparameter genau im richtigen Format eingegeben wird. Der Code sucht nach Text, der mit dem eingegebenen Teilstring beginnt.
  • Fehler: Das Makro scrollt nicht zur richtigen Zeile.

    • Lösung: Überprüfe, ob das Fenster unterhalb der Kopfzeile fixiert ist. Wenn nicht, fixiere die Zeile 1.

Alternative Methoden

Wenn du eine andere Methode verwenden möchtest, kannst du die FILTER-Funktion in Excel verwenden, um Daten dynamisch zu filtern. Diese Methode benötigt jedoch Excel 365 oder Excel 2021. Hier ist ein Beispiel:

=FILTER(B2:B8000, LEFT(B2:B8000, LEN(E1)) = E1)

In diesem Fall gibst du in E1 den gesuchten Teilstring ein, und die Funktion filtert alle Band-Leader, die mit diesem Teilstring beginnen.


Praktische Beispiele

  • Wenn du nach "perez" suchst, gib "pere" in die InputBox ein. Das Makro findet die erste Zeile, die mit "perez" beginnt, und scrollt dorthin.
  • Du kannst das Makro auch anpassen, um andere Spalten zu durchsuchen, indem du die .Cells(1, 2)-Referenz für die Spalte änderst.

Tipps für Profis

  • Nutze die Find-Methode, um nach anderen Kriterien zu suchen, wie z.B. nach bestimmten Zeichen oder Texten in einem String.
  • Experimentiere mit der LookIn-Einstellung, um die Suche auf Werte oder Formeln auszudehnen.
  • Verwende die FindNext-Methode, um mehrere Vorkommen eines Teilstrings zu finden.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um nach einem anderen Teilstring zu suchen?
Du kannst die Zeile mit vFind = InputBox(...) ändern, um das gesuchte Wort direkt im Code zu definieren.

2. Funktioniert das Makro auch in Excel Online?
Leider ist das Ausführen von VBA-Makros in Excel Online nicht möglich. Du benötigst die Desktop-Version von Excel.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige