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
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
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
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