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

Dynamische Suche möglich in/mit Excel?

Forumthread: Dynamische Suche möglich in/mit Excel?

Dynamische Suche möglich in/mit Excel?
01.11.2007 16:42:00
Sonnenpeter
Hallo,
ich suche einen Weg, mit einem Excel-Makro eine Dynamische-Suche aufzubauen.
Also nach jeder Buchstabeneingabe soll automatisch in der vorgegebenen Tabelle von gesucht und die übereinstimmenden Begriffe ausgeworfen werden.
Beispiel:
S in die Zelle eingegeben, gibt alle Begriffe aus die mit S beginnen, Su alle mit Su, Suc alle mit Suc. unsw.
Bisher habe ich mit nachfolgendem Makro gearbeitet:
Dim SpeicherPlätze As Variant
Dim GefundeneZelle As Variant

Sub SuchUndFind()
Dim MenueZelle As Variant
SpeicherPlätze = Sheets("Suchbegriffe").Range("E1").Value
If Sheets("Menue").Range("C4").Value = "" Then
Mldg = "SIE HABEN KEINEN SUCHBEGRIFF ANGEGEBEN! "
Stil = vbExclamation + vbCritical + vbDefaultButton2
Title = "Suchbegriff?"
Ergebnis = MsgBox(Mldg, Stil, Title)
Sheets("Menue").Range("C4").Select
Exit Sub
End If
Sheets("Menue").Unprotect
Sheets("Menue").Range("C6:G" & SpeicherPlätze).Value = ""
Suchwert = Sheets("Menue").Range("C4").Value
With Sheets("Suchbegriffe").Range("A:A")
Set GefundeneZelle = .Find(Suchwert, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext)
If GefundeneZelle Is Nothing Then
Mldg = "Der Suchbegriff ist nicht gespeichert! "
Stil = vbExclamation + vbCritical + vbDefaultButton2
Title = "Suchbegriff?"
Ergebnis = MsgBox(Mldg, Stil, Title)
Sheets("Menue").Protect
Sheets("Menue").Range("C4").Select
End If
If Not GefundeneZelle Is Nothing Then
ersteAdresse = GefundeneZelle.Address
Do
MenueZelle = Sheets("Menue").Range("A1").Value + 1
Set GefundeneZelle = .FindNext(GefundeneZelle)
If GefundeneZelle.Value = "Begriff" Then
Sheets("Menue").Range("C" & MenueZelle) = ""
Else
Sheets("Menue").Range("C" & MenueZelle) = GefundeneZelle
Sheets("Menue").Range("E" & MenueZelle) = GefundeneZelle(RowAbsolute + 1, 2)
Sheets("Menue").Range("G" & MenueZelle) = GefundeneZelle(RowAbsolute + 1, 3)
End If
Loop While Not GefundeneZelle Is Nothing And GefundeneZelle.Address  ersteAdresse
Sheets("Menue").Protect
Sheets("Menue").Range("C6").Select
End If
End With
End Sub


Wie immer für jede Hilfe Dankbar
Gruß Sonnenpeter

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Dynamische Suche möglich in/mit Excel?
01.11.2007 17:15:01
Daniel
Hi
Dein Makro kann ich leider nicht testen und optimieren, da ich keine Lust habe, mir die Datei drumherum zu basteln.
Außderdem ist es wegen unvollständiger Variablendeklaration unsauber programmiert.
daher hier ne Möglichkeit, wie man sowas ohne VBA mit Formeln lösen kann:
https://www.herber.de/bbs/user/47324.xls
Gruß, Daniel

Anzeige
AW: Dynamische Suche möglich in/mit Excel?
01.11.2007 17:53:00
Sonnenpeter
Hallo Daniel,
unsauberes Makro? "ist richtig!" es funktioniert aber :-).
Ich suche halt einen neuen Weg per Makro.
Mal sehen vieleicht hat doch noch jemand schon eine Lösung in der Schublade.
Trotzden Danke für die Formellösung, kann ich sicher auch mal brauchen.
Gruß Sonnenpeter

Anzeige
AW: Dynamische Suche möglich in/mit Excel?
01.11.2007 18:30:00
Daniel
Hi
also bei mir kommt ne Fehlermeldung so mit "Variable nicht deklariert" (ich glaube für Mdlg)
entweder hast du nicht alles gepostet, oder du arbeitset nicht mit OPTION EXPLICT.
OPTION EXPLICT ist aber seeeeehr empfehlenswert, da jede Variable extra deklariert werden muss.
das bedeutet zwar etwas mehr arbeit, aber es schützt einen vor Tippfehlern, da VBA sofort mit nem Fehler abbricht, wenn eine Variablenbezeichnung nicht stimmt.
ohne OPTION EXPLICT würde VBA einfach mit ner neuen Variable mit dem Wert 0 oder leer weiterrechnen und man wundert sich nachher über seltsame Ergebnisse, ohne daß man irgendwo nen Fehler finden kann.
Gruß, Daniel

Anzeige
AW: Dynamische Suche möglich in/mit Excel?
01.11.2007 17:59:00
Thomas
Hallo Sonnenpeter,
hier mal eine Lösung wie ich sie benutze. Allerdings mit einer Userform. Das Umarbeiten für deine Zwecke dürfte dann gut möglich sein.
Durch doppelklicken auf A1 im Sheet Suchbegriffe startet die UF.
Ok, die zu suchenden Einträge sind in der kürze der Zeit recht dürftig, aber zum probieren reicht es. Also hier die Datei: https://www.herber.de/bbs/user/47327.xls
Hoffe das hilft dir ein bissl, Tschüß Thomas.

Anzeige
AW: Dynamische Suche möglich in/mit Excel?
01.11.2007 21:41:57
Sonnenpeter
Hallo Thomas,
Danke, damit konnt ich etwas anfangen.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0)  "A1" Then Exit Sub
Zeile = 1
Sheets("Suchbegriffe").Range("B2:B65500").ClearContents
If Range("A1") = "" Then Exit Sub
Dim rng As Range
Suche = Range("A1").Value
With Sheets("Suchbegriffe").Range("A2:A65500")
Set C = .Find(Suche, LookIn:=xlValues, MatchCase:=False)
If Not C Is Nothing Then
firstAddress = C.Address
Do
If UCase(Left(C, Len(Suche))) = UCase(Suche) Then _
Sheets("Suchbegriffe").Range("B" & Zeile).Value = C
If UCase(Left(C, Len(Suche))) = UCase(Suche) Then _
Zeile = Zeile + 1
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address  firstAddress
End If
End With
End Sub


Das Ergebnis ist sicher wieder nicht sauber Programiert, aber es funktioniert :-))
Gruß Sonnenpeter

Anzeige
;
Anzeige

Infobox / Tutorial

Dynamische Suche in Excel mit VBA und Formeln


Schritt-für-Schritt-Anleitung

Um eine dynamische Suche in Excel zu implementieren, kannst Du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, um das oben genannte Makro anzupassen:

  1. Makro einfügen:

    • Öffne Excel und gehe zu Entwicklertools > Visual Basic.
    • Klicke im VBA-Editor auf Einfügen > Modul, um ein neues Modul zu erstellen.
    • Kopiere den folgenden Code in das Modul:
    Sub SuchUndFind()
       Dim SpeicherPlätze As Variant
       Dim GefundeneZelle As Variant
       Dim Suchwert As String
    
       SpeicherPlätze = Sheets("Suchbegriffe").Range("E1").Value
       If Sheets("Menue").Range("C4").Value = "" Then
           MsgBox "SIE HABEN KEINEN SUCHBEGRIFF ANGEGEBEN!", vbExclamation
           Sheets("Menue").Range("C4").Select
           Exit Sub
       End If
    
       Sheets("Menue").Unprotect
       Sheets("Menue").Range("C6:G" & SpeicherPlätze).Value = ""
       Suchwert = Sheets("Menue").Range("C4").Value
    
       With Sheets("Suchbegriffe").Range("A:A")
           Set GefundeneZelle = .Find(Suchwert, LookIn:=xlValues, LookAt:=xlPart)
           If Not GefundeneZelle Is Nothing Then
               ' Weitere Verarbeitung
           End If
       End With
    End Sub
  2. Makro anpassen:

    • Stelle sicher, dass die Zellen und Blätter in Deinem Excel-Dokument den Namen entsprechen, die im Makro verwendet werden (z.B. "Menue" und "Suchbegriffe").
  3. Makro ausführen:

    • Schließe den VBA-Editor und gehe zurück zu Excel.
    • Füge ein Textfeld in die Zelle C4 ein, um den Suchbegriff einzugeben. Führe das Makro aus, um die Ergebnisse anzuzeigen.

Häufige Fehler und Lösungen

  • Variable nicht deklariert: Stelle sicher, dass alle Variablen deklariert sind. Verwende Option Explicit am Anfang des Moduls, um Fehler zu vermeiden.

  • Suchbegriff nicht gefunden: Überprüfe, ob der Suchbegriff tatsächlich in der Liste vorhanden ist. Achte auf Groß- und Kleinschreibung.

  • Makro funktioniert nicht: Stelle sicher, dass Du die Makros in Excel aktiviert hast. gehe zu Datei > Optionen > Trust Center > Einstellungen für das Trust Center und aktiviere die Makros.


Alternative Methoden

Wenn Du keine VBA-Makros verwenden möchtest, kannst Du auch Formeln für eine dynamische Suche nutzen:

  1. VERGLEICH und INDEX:

    • Verwende die Formel =INDEX(Suchbegriffe!A:A;VERGLEICH("*"&Suchbegriff&"*";Suchbegriffe!A:A;0)) in einer Zelle. Dies gibt den ersten gefundenen Wert zurück.
  2. FILTER-Funktion (Excel 365):

    • Mit der FILTER-Funktion kannst Du die Daten dynamisch filtern. Beispiel: =FILTER(Suchbegriffe!A:A;SUCHEN(Suchbegriff;Suchbegriffe!A:A)).

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du die dynamische Suche umsetzen kannst:

  • Beispiel 1: Wenn Du in der Zelle C4 S eingibst, wird automatisch eine Liste aller Begriffe angezeigt, die mit S beginnen.

  • Beispiel 2: Mit der FILTER-Funktion kannst Du eine dynamische Liste erstellen, die sich aktualisiert, sobald Du den Suchbegriff in der Zelle änderst.


Tipps für Profis

  • Eingabevalidierung: Verwende die Datenüberprüfung, um sicherzustellen, dass nur gültige Suchbegriffe eingegeben werden.

  • Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung in Deinem Makro, um unerwartete Ergebnisse zu vermeiden.

  • Benutzerformulare: Überlege, ein Benutzerformular zu erstellen, um die Suche benutzerfreundlicher zu gestalten.


FAQ: Häufige Fragen

1. Kann ich die dynamische Suche in älteren Excel-Versionen verwenden? Ja, die meisten der beschriebenen Methoden sollten auch in Excel 2010 und neuer funktionieren. Die FILTER-Funktion ist jedoch nur in Excel 365 verfügbar.

2. Was ist der Vorteil von VBA gegenüber Formeln? VBA bietet mehr Flexibilität und kann komplexere Aufgaben automatisieren, während Formeln einfacher zu implementieren sind, aber weniger Anpassungsfähigkeit bieten.

3. Wie kann ich sicherstellen, dass mein Makro schnell läuft? Vermeide unnötige Berechnungen innerhalb des Makros und schütze die Arbeitsblätter nur, wenn es unbedingt notwendig ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige