Anzeige
Archiv - Navigation
1412to1416
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Suchfunktion mit Ausblenden der "Nichtfundzeilen"

Suchfunktion mit Ausblenden der "Nichtfundzeilen"
06.03.2015 15:46:55
Wolfgang
Hallo und einen schönen Tag !
Im Büro muß ich bei Anrufen von Kunden sehr schnell Informationen aus verschiedenen Dateien wie Preislisten und Frachttabellen ermitteln. Dabei helfen mir die Excel-Bordmittel wie Filter nicht wirklich weiter und die Suchmakros, die ich bisher gefunden habe, sind für meine Zwecke auch nicht optimal.
Daher möchte ich mir eine "zentrale Suchfunktion" in die Symbolleiste legen,
die wie folgt arbeitet:
Aufruf einer Userform mit einer Textbox, in der ein Suchbegriff (Wert oder String) eingegeben wird. Daraufhin sollen im jeweils aktiven Excel-Arbeitsblatt alle Zeilen ausgeblendet werden, in denen der gesuchte Begriff NICHT vorkommt.
Schön wäre es, wenn die Suche und Ausblenden nach entsprechender, wahlweiser Voreinstellung erst in Zeile 2 beginnen würde (damit die Listenüberschriften sichtbar bleiben).
Anschließend soll über einen Commandbutton die Userform geschlossen
und ALLE Zeilen wieder eingeblendet werden.
Das Einrichten der Userform, Textbox etc. und die dazugehörigen Programmschritte sind mir soweit schon klar, aber die Programmierung der Suchfunktion übersteigt leider meine bescheidenen Kenntnisse. :-(
Hilfe und Anregungen dazu wären mir daher sehr willkommen !
Danke und ein schönes Wochenende !
Wolfgang

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

Betreff
Datum
Anwender
Anzeige
AW: Suchfunktion mit Ausblenden der "Nichtfundzeilen"
06.03.2015 20:38:47
Wolfgang
Hallo und schönen Dank, Peter !
Dein Lösungsvorschlag kommt dem, was ich gesucht habe, schon sehr nahe !
Mein einziges Problem:
Im Programmcode muß man in der Zeile:
"With ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen - hier Tabelle1 - ggf. anpassen!"
den Tabellenblattnamen manuell überarbeiten. Ich arbeite aber leider mit diversen Dateien, die teilweise auch extern erstellt werden und kann nicht jedesmal den Namen anpassen.
Daher suche ich ja auch eine "zentrale" Suchfunktion, die in allen Dateien funktioniert.
Gibt es eine Möglichkeit, den Code so zu ändern, damit jeweils das aktive Tabellenblatt durchsucht wird ?
Das wäre dann die Kirsche auf der Torte :-)
Danke und Gruß
Wolfgang

Anzeige
AW: Suchfunktion mit Ausblenden der "Nichtfundzeilen"
06.03.2015 20:45:04
Daniel
Hi
wenn du das aktive Sheet ansprechen willst: ActiveSheet
steht der Code in einem allgemeinen Modul, dann kann man vor Range, Cells, Rows, Columns auch die Sheetangabe ganz weglassen, wenn man das aktive Blatt referenzieren will.
(gilt nicht in einem Tabellenblattmodul!)
Gruß Daniel

AW: Suchfunktion ...läuft :-)
06.03.2015 20:57:27
Wolfgang
Hallo Daniel !
Da hab ich den Wald vor lauter Bäumen nicht gesehen...
Na klar... ActiveSheet...und nun läuft es und macht zu 100%, was es soll
...trotz abweichender Tabellenblattnamen.
*freu*
Vielen Dank für den Tipp und schönes Wochenende !
Gruß
Wolfgang

Anzeige
nachgehakt
09.03.2015 01:12:07
Thomas
hallo,
ich finde dies auch richtig cool. Nur leider habe ich keine Ahnung wie ihr das meint mit dem ActiveSheet
Kann mir das jemand einarbeiten? Oder genauer erklären wie ich das machen muss? Ich habe null Ahnung von VBA.
Liebe grüsse thomas

AW: nachgehakt
09.03.2015 02:53:53
Wolfgang
Hallo Thomas !
Herzlich willkommen im Reich der VBA-Enthusiasten. Wenn man sich etwas damit beschäftigt, stellt man bald fest, daß man damit im Büro so ziemlich alles machen kann, außer Kaffee kochen :-)
Ich arbeitet täglich stundenlang mit Excelanwendungen und habe viele Routinetätigkeiten
wie Datensuche, Filtern, Aufrufen von Windows-Ordners „auf Knopfdruck“ etc. erheblich vereinfacht.
Die Grundlagen habe ich mir durch fleissiges Stöbern im Internet wie zum Beispiel hier im Forum erarbeitet. Und das wird Dir auch nicht erspart bleiben. Wenn man begriffen hat, wie und wo man ein Makro aufzeichnet und/oder abspeichert, ist das schon die halbe Miete.
Zu Deiner Frage kann ich Dir als einem „Newbie“ im Moment leider nur grobe Anhaltspunkte geben,
da die Vorgehensweise je nach Excel-Version etwas unterschiedlich ist.
Da man mir hier schon oft sehr gut geholfen hat, versuche ich dies jetzt auch mal.
Öffne eine Excel-Arbeitsmappe.
Die VBA-Befehlsleiste muß aktiviert sein. In Excel 2010 geht das z.B. über einen Reiter „Entwicklertools“.
Drücke ALT+F11, damit öffnest Du den VBA-Projekt Explorer.
Da siehst Du VBAProjekt, Diese Arbeitsmappe, Tabelle1,Tabelle2 usw.
Klicke auf Diese Arbeitsmappe, dann in der Menüleiste auf Einfügen/Userform
Nun musst Du die Steuerelement-Toolbox bzw. Werkzeugsammlung finden und öffnen.
Von dort ziehst Du ein Bezeichnungsfeld/Label, ein Textfeld/Textbox und zwei Commandbutton/Befehlsschaltflächen auf die Userform.
Die Namen und das Aussehen kannst Du über Mausklick rechts/Eigenschaften verändern.
Das Label benennst Du z.B. mit „Suchtext eingeben“, Button1 mit "Suche starten", Button2 mit "Suche beenden".
Jetzt in der Userform auf den ersten CommandButton klicken und den nachfolgenden Code dort zwischen

Private Sub Commandbutton1 und End Sub
einkopieren und speichern.
'Button suche starten
'Alle Einträge in einer Liste zeigen
Dim sSuchbegriff As String
Dim rZelle As Range
Dim sFundst As String
Dim myRange As Range
If Trim$(TextBox1.Value) "" Then
sSuchbegriff = Trim$(TextBox1.Value)
Else
MsgBox "Sie haben keinen Suchbegriff eingegeben - ABBRUCH", _
48, " Hinweis für " & Application.UserName
Exit Sub
End If
' zu Beginn alle Zeilen (von 2 - 50000) einblenden
'With ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen - hier Tabelle1 - ggf. anpassen!
With ThisWorkbook.ActiveSheet
Set rZelle = .Cells.Find(what:="*" & sSuchbegriff & "*", lookat:=xlWhole, LookIn:=xlValues)
If Not rZelle Is Nothing Then
sFundst = rZelle.Address
Do
If myRange Is Nothing Then
Set myRange = Rows(rZelle.Row)
Else
' die Bereiche der NICHT Ja Zellen sammeln
Set myRange = Union(myRange, Rows(rZelle.Row))
End If
Set rZelle = .Cells.FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address sFundst
Else
MsgBox "Der gesuchte Begriff """ & sSuchbegriff & """ wurde nicht gefunden.", _
48, " Hinweis für " & Application.UserName
End If
End With
' den Bereich der nicht gefundenen Zeilen ausblenden
If Not myRange Is Nothing Then
Rows("2:50000").EntireRow.Hidden = True ' alle Zeilen (2 - 50000) ausblenden
myRange.Rows.Hidden = False ' die Union gesammelten wieder einblenden
Application.Goto Reference:=ActiveSheet.Range("A1"), Scroll:=True
End If
CommandButton2.SetFocus

Dann auf den zweiten Button klicken und dort den folgenden Code hinterlegen:
'Button Schließen
'

Public Sub AlleEinblenden()
With ThisWorkbook.ActiveSheet
.Rows("2:50000").EntireRow.Hidden = False
End With
Userform1.TextBox1.Value = ""
Userform1.Hide
Userform1.Hide
Spätestens jetzt solltest Du die Arbeitsmappe abspeichern. Wichtig: Bei den neueren Excel-Versionen musst Du die Datei als XLSM (Excelmappe mit Makros) _ speichern. Jetzt hast Du im Hintergrund dieser Arbeitsmappe ein Formular für die Suche in der Arbeitsmappe. _ Du kannst es beispielsweise aufrufen, indem Du auf einem Excel-Arbeitsblatt einen weiteren Commandbutton setzt und dort den Befehl: Userform1.Show hinterlegst. Mit dem zusätzlichen Code: With Userform1.TextBox1 .SetFocus End With setzt Du den Cursor in die textbox der Userform. Wenn alles läuft, kannst Du jetzt über diesen Button das Suchformular aufrufen und in der Textbox Suchbegriffe eingeben. Durch Drücken der ENTER-Taste wird die Suche _ gestartet und die Liste gefiltert. Ein weiteres ENTER und die Liste wird wieder komplett angezeigt. Wenn Du diese Userform im VBA-Explorer nicht unter diese Arbeitsmappe abspeicherst, sondern _ unter Personal.xls, kannst Du von jeder Excelmappe aus auf die Suchfunktion zugreifen. Stöbere das mal nach: Makros in der Symbolleiste hinterlegen oder über Tastenkombination _ starten. Viel Spaß beim Ausprobieren :-) Gruß Wolfgang

Anzeige
Besten Dank an Wolfgang
09.03.2015 11:45:52
Thomas
Hallo Wolfgang,
vielen dank das Du dir die viele zeit genommen hast. Mit deiner erklärung erschliessen sich viele Punkte für mich. Ich habe schon sehr viel gelesen nur fällt mir es schwer dann alles im zusammenhang zusehen.
Mit deiner Erklärung habe ich nun wieder viele zusammenhänge. Durch dieses Modul werde ich viel mehr Zeit zum lesen haben und vor allem viel weniger sucherei.
also wie gesagt besten Dank für die tipps und für den Code.
liebe Grüsse thomas

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige