Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Suchfunktion in Excel
#1
Hallo liebe Leute,

ich habe folgendes Szenario:

Excel-Tabelle mit mehreren hundert Einträgen (Zeilen);
Der Tabellenkopf ist fixiert, um den Überblick zu behalten;
Über dem Tabellenkopf befindet sich ein Feld, dass der Stichwortsuche dienen soll, also eine Art Suchfeld;


Folgendes Problem liegt vor:

Ich möchte nur die Zeilen eingeblendet lassen, die das gesuchte Stichwort in einer der Spalten der entsprechenden Zeile enthalten.


Lösungsansatz:

Alle Zeilen, die das gesuchte Stichwort NICHT enthalten, sollen nach der Eingabe (Aktualisierung) des Suchfeldes ausgeblendet werden.

----------------------

Vor einigen Jahren hatte ich einmal genau so ein Script bewerkstelligt, jedoch habe ich es inzwischen nicht mehr und finde auch ähnliches nicht mehr im weltweiten Netz.
Ich hoffe, dass ihr mir helfen könnt.

Liebe Grüße


Ben

----------------------

Ich füge mal dem Anhang eine Demo-Tabelle bei, um die Grundstruktur deutlich zu machen.


.xlsx   Demo.xlsx (Größe: 12,63 KB / Downloads: 3)
Antworten Top
#2
Hi,

so ganz habe ich das mit dem Stichwort in Verbindung mit Zeilenausblenden nicht verstanden. Deshalb mal ein genereller Tipp: schau dir mal die Filterfunktion(en) an - vllt. kommst du damit schon weiter.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
[-] Folgende(r) 1 Nutzer sagt Danke an WillWissen für diesen Beitrag:
  • hatstick
Antworten Top
#3
Vielen Dank zunächst für die schnelle Rückmeldung,

die Filterfunktion ist mir bekannt, möchte ich jedoch in diesem Fall nicht nutzen, da ich tatsächlich kurz ein Stichwort, also eine Zeichen- oder Teilzeichenkette in ein Feld eintippen möchte.
Nach dem Aktualisieren (z.B. durch das Drücken der Enter-Taste) sollen dann alle unpassenden Zeilen ausgeblendet werden.

Der Vorteil:

Man nutzt ein einziges Feld, um alle Zeilen mit relevantem Inhalt eingeblendet zu lassen, ohne, dass man sich durch die Filter klicken muss.
------------------------
Antworten Top
#4
Beim ändern des Inhaltes der Suchzeile (In diesem Fall ist es C2):

Code:
Sub Worksheet_Change(ByVal Target As Excel.Range)

If Target.Address = "$C$2" Then

[Nun sollen alle Zeilen ausgeblendet werden, die nun NICHT den Inhalt von C2 enthalten]

End If
End Sub
Antworten Top
#5
Hallo ihr Lieben,

ich habe nun folgendes erfolgreich hinbekommen:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) <> "C2" Then Exit Sub
Call Search
End Sub

Sub Search()
ActiveSheet.Range("A1:U999").Select
Selection.Rows.Hidden = False

  'Jede Zeile >= 6 soll nun mit C2 abgeglichen werden.
  'Ist der String aus C2 NICHT Teil einer Zelle der Zeilen >= 6, soll diese Zeile ausgeblendet werden.
  'Dies Soll für jede befüllte Zeile >= 6 wiederholt werden.
 
  ActiveSheet.Range("C2").Select
  MsgBox ("Suche wurde in C2 ausgelöst mit ") & ActiveSheet.Range("C2").Value & ("!")
End Sub

Mir fehlt nur noch die Programmroutine, die für das sorgt, was im Mittelteil auskommentiert ist.

Ich freue mich auf eure Lösungen.
Antworten Top
#6
So liebe Leute,

ich habe das Problem gelöst. Wobei hier sicherlich noch Optimierungsmöglichkeiten vorhanden sein dürften.


Hier der Code:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) <> "C2" Then Exit Sub
Call Search
End Sub

Sub Search()
ActiveSheet.Range("A1:U999").Select
Selection.Rows.Hidden = False

suche = ActiveSheet.Range("C2").Value
ActiveSheet.Range("AA6:AA100").Select
Dim cell As Range

For Each cell In Selection
   cell.EntireRow.Hidden = (InStr(1, cell, suche, vbTextCompare) = 0)
Next
  ActiveSheet.Range("C2").Select
End Sub


In der Spalte AA steht folgende Formel (die man sicherlich auch im Makro unterbringen kann):

=VERKETTEN(A6;B6;C6;D6;E6;F6;G6)

Damit werden alle Inhalte der Spalten, die durchsucht werden sollen in die Zelle AA gepackt.
Das Script vergleicht dann das eingegebene Suchwort aus C2 mit den Einträgen unter AA und blendet alle Zeilen aus, die keinen Treffer haben.

Hier die aktualisierte Demo (ohne VBA)

.xlsx   Suchfunktion_noVBA.xlsx (Größe: 16,33 KB / Downloads: 4)

Hier das VBA-Script als TXT-Datei

.txt   Suchfunktion_VBA.txt (Größe: 457 Bytes / Downloads: 2)


----------------------------
Für Kritik und Anregungen bin ich sehr offen und dankbar.
Antworten Top
#7
Hallo ihr Lieben

ich habe die Tabelle mit einem Update versehen.


Neuerungen:
  • InStr wurde durch "like" ersetzt
  • Die Suche ist nun mit * möglich. (z.B. String1*String2)
  • Das Script durchsucht nur die Reihen, die befüllt sind
  • Die zusammengesetzten Suchstrings befinden sich jetzt in Spalte A, um Änderungen der Tabelle zu erleichtern
  • Die Einrichtung ist jetzt über zentral deklarierte Variablen möglich

Funktionsweise:


Das Script vergleicht den Suchstring, der im zuvor definierten Suchfeld, z.B. in C2, eingegeben wurde mit den befüllten Reihen unterhalb des vorher definierten Tabellenkopfes. Gibt es keine Übereinstimmungen mit dem Inhalt der jeweiligen Zeile, wird diese ausgeblendet. Danach wird die nächste Zeile verglichen, bis keine befüllte Zeile mehr vorhanden ist. Das Ergebnis ist, dass nur die Zeilen eingeblendet bleiben, die dem Suchkriterium entsprechen.

Ausgelöst wird die Suche durch die Aktualisierung der Tabelle (z.B. durch Drücken von Enter oder Tab). Nach beendeter Suche springt der Cursor automatisch wieder auf das Suchfeld.



Dateianhang:

  • .xlsx   Suche_exVBA.xlsx (Größe: 15,36 KB / Downloads: 0) (Die Tabelle ohne Makrofunktion)

  • .txt   Suche_VBA.txt (Größe: 1,29 KB / Downloads: 1) (das VBA-Script zum Einfügen)

Code:


PHP-Code:
Option Explicit
Option Compare Text

Private Sub Worksheet_Change(ByVal Target As Range)
Dim SearchField As String
Dim SearchEntry 
As String
Dim Keywords 
As String
Dim DataStart 
As Integer
Dim MaxRow 
As Integer
Dim MaxColumn 
As String


SearchField 
"C2"             
Keywords 
"A"                 
DataStart 
5                  
SearchEntry 
ActiveSheet.Range(SearchField).Value
MaxRow 
Cells.Find(What:="*"SearchOrder:=xlByRowsSearchDirection:=xlPrevious).Row
MaxColumn 
Split(Cells(1Cells.Find(What:="*"SearchOrder:=xlByColumnsSearchDirection:=xlPrevious).Column).Address"$")(1)

If 
Target.Address(00) <> SearchField Then Exit Sub

Call Search
(MaxRowSearchFieldKeywordsDataStartSearchEntryMaxColumn)

End Sub



Sub Search
(As Integerb$, c$, As Integere$, As String     
If e$ = "" Then
ActiveSheet
.Range("A1:A" a).Select
Selection
.Rows.Hidden False
Else
Dim Cell As Range
Dim mRange 
As Range
Set mRange 
ActiveSheet.Range(c$ & ":" c$ & a)
For 
Each Cell In mRange.Cells


Cell
.EntireRow.Hidden = (Cell Like "*" e$ & "*") = False


Next Cell
End 
If

ActiveSheet.Range(b$).Select    
End Sub 




Mit besten Grüßen


Ben
Antworten Top
#8
Moin!
Ich habe dies mal mit einem "Auto-Autofilter" gelöst.
Macht imo mehr Sinn als eine Schleife.

Gruß Ralf


Angehängte Dateien
.xlsm   AutoAutoFilter.xlsm (Größe: 26,11 KB / Downloads: 1)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#9
(26.06.2017, 18:44)RPP63 schrieb: Moin!
Ich habe dies mal mit einem "Auto-Autofilter" gelöst.
Macht imo mehr Sinn als eine Schleife.

Gruß Ralf

Hallo Ralf,

aus Sicherheitsgründen möchte ich keine makrofähigen Dateien herunterladen. Kannst du dein Beispiel als herkömmliche Excel-Tabelle und getrennt davon eine TXT-Datei mit dem VBA-Script hochladen?

Mit besten Grüßen


Ben
Antworten Top
#10
Öffne sie, ohne Makros zu aktivieren.
Ist auch kein Hexenwerk:
In Tabelle1
Code:
Private Sub TextBox1_Change()
Dim Letzte As Long
Letzte = Cells(Rows.Count, 1).End(xlUp).Row
With Range(Cells(2, 1), Cells(Letzte, 2))
   .AutoFilter _
       field:=1, Criteria1:=TextBox1.Text & "*", VisibleDropDown:=False
   .AutoFilter field:=2, VisibleDropDown:=False
End With
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then    'bei ESC-Taste wird Filterung aufgehoben
   TextBox1 = ""
   If AutoFilterMode Then Cells(2, 1).AutoFilter
End If
End Sub

Private Sub CommandButton1_Click()
TextBox1 = ""
If AutoFilterMode Then Cells(2, 1).AutoFilter
End Sub

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste