2.9k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo!

Ist es möglich, in Excel über mehrere Spalten dynamische Autofilter zu setzen ohne das ich die Pfeile der Filter betätige, sondern den Suchbegriff über die betreffenden Spalten eingebe und das mir dann die Zeilen mit dem Begriff angezeigt werden?

ich bedanke mich schon mal im vorraus
und wünsche noch einen schönen Tag!

Viele Grüße

Ralle

10 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

das geht nur mit dem Spezialfilter (wenn ich Dich richtig verstehe)

Gruss
Rainer
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

anders als Rainer bin ich der Meinung, dass das nur über ein Makro realisierbar ist, da man beim Spezialfilter ja auch in der Symbolleiste auf den entsprechenden Button klicken und dann in die Felder ausfüllen muss. Du wolltest aber ja in einer Zelle oder mehreren Zellen den Begriff eingeben und das geht meines Erachtens nach nur über ein Makro.

MfG,
Oliver
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all :-)

hier ein beispiel

gruss nighty

www.supportnet.de/t/2336580
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all :-)

noch ein beispiel eines zeilen/spaltenfilters

erlaubt sind >1 begriffe getrennt durch ein leerzeichen

zuruecksetzung des filters erfolgt durch leereingabe

allerdings noch nicht auf geschwindigkeit getrimmt und noch nicht optimiert :-))

gruss nighty

Option Explicit
Sub Filter()
Call EventsOff
Dim EinGabe As String
ReDim sammel(1) As String
Dim zeilen0 As Integer, zeilen1 As Long, zaehler1 As Integer, zaehler2 As Integer, zaehler3 As Integer, zaehler4 As Integer, zaehler6 As Integer
Dim spalten0 As Integer, spalten1 As Integer
Rem hier deinen filterbereich festlegen
Rem von bis
zeilen0 = 1
zeilen1 = 5
Rem von bis
spalten0 = 1
spalten1 = 5
With ActiveSheet
For zaehler1 = zeilen0 To zeilen1
.Rows(zaehler1 & ":" & zaehler1).EntireRow.Hidden = False
Next zaehler1
For zaehler1 = spalten0 To spalten1
.Cells(1, zaehler1).EntireColumn.Hidden = False
Next zaehler1
EinGabe = InputBox("Eingabe des Obstes")
If EinGabe = "" Then End
zaehler4 = 1
For zaehler1 = 1 To Len(EinGabe)
If Mid(EinGabe, zaehler1, 1) <> " " Then
sammel(zaehler4) = sammel(zaehler4) + Mid(EinGabe, zaehler1, 1)
Else
zaehler4 = zaehler4 + 1
ReDim Preserve sammel(zaehler4)
End If
Next zaehler1
For zaehler1 = zeilen0 To zeilen1
For zaehler2 = spalten0 To spalten1
For zaehler3 = 1 To zaehler4
If UCase(Cells(zaehler1, zaehler2)) = UCase(sammel(zaehler3)) Then
zaehler6 = zaehler6 + 1
End If
Next zaehler3
Next zaehler2
If zaehler6 = 0 Then
.Rows(zaehler1 & ":" & zaehler1).EntireRow.Hidden = True
Else
zaehler6 = 0
End If
Next zaehler1
zaehler6 = 0
For zaehler1 = spalten0 To spalten1
For zaehler2 = zeilen0 To zeilen1
For zaehler3 = 1 To zaehler4
If UCase(Cells(zaehler2, zaehler1)) = UCase(sammel(zaehler3)) Then
zaehler6 = zaehler6 + 1
End If
Next zaehler3
Next zaehler2
If zaehler6 = 0 Then
.Cells(1, zaehler1).EntireColumn.Hidden = True
Else
zaehler6 = 0
End If
Next zaehler1
End With
Call EventsOn
End Sub

Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub

Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

schau dir mal das Beispiel Autofilter dynamisch von meiner HP an, das sollte deiner beschriebenen Aufgabenstellung entsprechen.

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo zusammen!

Bin leider heute erst dazu gekommen mir Eure Antworten anzuschauen. Ein herzliches Danke schön an alle. Um es gleich vorwegzunehmen, Beverly's dynamische Autofilter ist genau das was ich brauche. Ich bin begeistert! Beverly, ich hätte da noch eine Frage. Ich habe 8 Spalten mit unterschiedlichen Einträgen z. B. Text, Text mit Zahlen usw. Klappt alles super. Aber, in der letzten Spalte macht der Filter Probleme. Dort habe ich nur Zahlenwerte zwischen 001 und 800. Nach Eingabe einer Zahl mit vorangestellten Nullen z.B. 008 zeigt er mir nichts an. Er filtert zwar so wie es aussieht, aber es kommt keine Anzeige. Wie gesagt, es passiert nur mit vorrangestellten Nullen, alle anderen Zahlen werden gefiltert angezeigt. Vielleicht hast Du ja eine Lösung. Wenn nicht ist auch nicht schlimm. Deine Filter sind auch so schon Spitze.

Herzliche Grüße

Ralle
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

sind die Zellen als Text formatiert oder als Zahl mit benutzerdefiniertem Zahlenformat?

Bis später,
Karin
0 Punkte
Beantwortet von
Hi,

benutzerdefiniert. Habe auch schon mit Text probiert, geht leider auch nicht. Als Standard oder Zahl geht logischerweise auch nicht, da mir dann die Nullen fehlen.

Gruß
Ralle
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

dann kannst du den Code dahingehend erweitern, dass bei Zahlen noch die Spalte geprüft wird und wenn es die betreffende ist, dann musst du als Kriterium auch das Format mit angeben - so nach diesem Prinzip (in meinem Beispiel ist es Spalte E):

' Eingabe wurde gelöscht
If raZelle = "" Then
' Autofilter für das betreffende Fald zurücksetzen
.AutoFilter Field:=raZelle.Column + 1 - ActiveSheet.AutoFilter.Range(1).Column
' in die betreffende Zelle eintragen
raZelle = "Suchbegriff eingeben"
Else
' Suchkriterium ist eine Zahl
If IsNumeric(raZelle) Then
If raZelle.Column = 5 Then '<== für Spalte E
' Zellen sind benutzerdefiniert formatiert
.AutoFilter Field:=raZelle.Column + 1 - ActiveSheet.AutoFilter.Range(1).Column, _
Criteria1:="=" & Format(raZelle, "000")
Else
' Zellen sind als Standard formatiert
.AutoFilter Field:=raZelle.Column + 1 - ActiveSheet.AutoFilter.Range(1).Column, _
Criteria1:="=" & raZelle
End If
' Suchkriterium ist ein Datum
ElseIf IsDate(raZelle) Then
' Autofilter für das betreffende Feld setzen
' es werden 2 Kriterien verwendet, weil mit Kriterium "=" das Datum nicht gefiltert wird
.AutoFilter Field:=raZelle.Column + 1 - ActiveSheet.AutoFilter.Range(1).Column, _
Criteria1:=">=" & raZelle.Value2, Criteria2:="<=" & raZelle.Value2
Else
' Autofilter für das betreffende Feld setzen, Filterkriterium "Enthält"
.AutoFilter Field:=raZelle.Column + 1 - ActiveSheet.AutoFilter.Range(1).Column, _
Criteria1:="=*" & raZelle & "*"
End If
End If

Bis später,
Karin
0 Punkte
Beantwortet von
Hi,

ich hatte vorhin schon geantwortet, aber ich weiß nicht ob das angekommen ist, da mein PC abgestürzt ist.
Beverly, hat super geklappt mit dem neuen Code. Hab Herzlichen Dank für Deine Bemühungen.

Gruß

Ralle
...