Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1200to1204
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

Autofilter mit Doppelclick verändern?

Autofilter mit Doppelclick verändern?
Peter
Guten Tag
In einem Excelfile habe ich eine grosse Tabelle; in Spalte A hat es verschiedene Nummern, die mehrfach vorkommen. Auf diese Spalte habe ich ein Autofilter gesetzt. Damit ich dann einzelne Nummern filtern kann.
Gibt es eine Möglichkeit, dass mittels VBA bei einen Doppelklick auf eine Zelle in Spalte A automatisch nach diesem Wert gefiltert wird? Erfolgt ein zweiter Doppelklick, wird wieder alles angezeigt.
Danke für jede Hilfe.
Gruss, Peter
https://www.herber.de/bbs/user/73583.xls
Genau sowas habe ich
16.02.2011 14:33:16
Holger,
Hallo,
mithilfe dieses Forums habe ich folgenden Code erstellt.
Es wird ein Spezialfilter benutzt, dazu muss man einen Hilfsrange definieren.
Ist etwas kompliziert. Lass es einfach mal im Einzelmodus laufen und
bei Fragen, melde Dich.
Im Tabellenblatt diesen Code
Sub Sheet
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$B$4" Then
Call DoAdvancedFilter(Target.Value)
end sub

Dann die Funktion DoAdvancedFilter mit Parameterübergabe.
Bei mir sind die Values im Zellinhalt durch ein Blank getrennt,
das musst du anpassen. Wenn in der Zelle HOLGER HALLO steht
wird auch auf diese Werte gefiltert.
Function DoAdvancedFilter(ByVal CRITERIA As String)
Dim rngCrit As Range
Dim arrCrit
Dim strCriteria As String, intLen As Integer, strFilterMessage As String
strCriteria = Mid(CRITERIA, (InStr(CRITERIA, ":") + 2))
intLen = Len(strCriteria)
If intLen > 1 Then
strCriteria = Left(strCriteria, intLen - 1)
strFilterMessage = "Filterung auf: " & strCriteria
Else
strFilterMessage = "Keine Filterung möglich!"
Range("B10").Activate
End
End If
arrCrit = Split(strCriteria, " ")                                  'Argumente in ein Array
Set rngCrit = Range("AA10").Resize(UBound(arrCrit) + 2)           'Überschrift + Argumente
With Application
.ScreenUpdating = False
.EnableEvents = False
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
With rngCrit
.Font.Color = vbWhite
.Cells(1, 1).Value = Cells(10, 2).Value             'Überschrift von B2 in die  _
erste Zelle des Range kopieren
.Cells(2, 1).Resize(UBound(arrCrit) + 1) = Application.Transpose(arrCrit) ' _
Argumente
With Range("B10", Cells(Rows.Count, 2).End(xlUp))   'Filterbereich Spalte B
.AdvancedFilter xlFilterInPlace, rngCrit
End With
.Clear                                              'Hilfszellen löschen
End With
.EnableEvents = True
.ScreenUpdating = True
End With
Range("B10").Activate
End Function

Anzeige
AW: Genau sowas habe ich
16.02.2011 15:30:53
Peter
Hallo Holger
Danke für die Antwort. Sehe ich richtig, dass du immer auf B4 doppelklickst. Ich möchte auf irgend eine Zeile, die im Filterbereich steht, doppelklicken.
Ich habe mal den Recorder bemüht, der mir folgendes aufgezeichnet hat:
selection.autofilter field:=2
selection.autofilter field:=2, criteria1:="24.01.2010"
selection.autofilter field:=2
Selection.AutoFilter Field:=1
Selection.AutoFilter Field:=1, Criteria1:="1014"
Selection.AutoFilter Field:=1
Wenn ich das gleiche über die Direktzeile eingebe, funktioniert die Filterung nach 1014 und die Rücksetzung.
Beim Datum geht es nicht (es werden alle Zeilen ausgeblendet; wenn ich dann bei benutzerorientiert nachsehe, ist dort das Datum "24.01.2010" eingetragen - wenn ich o.k. drücke, wir ddann entsprechend gefiltert.
Weshalb geht die Filterung mit dem Datum nicht über die Direktzeile (und deshalb kann ich es wohl auch nicht im Code umsetzen)?
Gruss, Peter
Anzeige
AW: Genau sowas habe ich
16.02.2011 15:40:37
Holger,
Hallo Peter,
den Rangebereich kannst du ja erweitern mit InterSect, glaube ich.
Falls du nicht weißt wie, kann ich Dir morgen das aus einem anderem Code
von mir raussuchen.
Die Recorderaufzeichnung bringt wenig, weil der AdvancedFiler immer einen
Hilfsrange benötigt, in dem die Filterkriterien definiert sind.
Grob gesagt hast du hier den Bereich den du einschränken willst (der muss stimmen)
und rngCrit ist der Bereich, in dem das Kriterium steht.

With Range("B10", Cells(Rows.Count, 2).End(xlUp))   'Filterbereich Spalte B
.AdvancedFilter xlFilterInPlace, rngCrit
Ich weiß jetzt nicht was du mit Direktbereich meinst?
Anzeige
AW: Autofilter mit Doppelclick verändern?
16.02.2011 15:54:05
Beverly
Hi Peter,
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
Cancel = True
If ActiveSheet.AutoFilter.Filters.Item(1).On Then
Range("A:A").AutoFilter Field:=1
Else
Range("A:A").AutoFilter Field:=1, Criteria1:="=" & Target, Operator:=xlAnd
End If
End If
End Sub



Wow
16.02.2011 16:04:54
Holger,
Hallo Karin,
wenn das geht ... was aber wenn in Target mehrere values enthalten sind,
auf die dann gefiltert werden soll.
Beispiel: Im Target steht 1 3 7 und nun soll in Spalte A auf alles gefiltert werden,
was 1 3 oder 7 enthält?
Denn wenn das genauso geht, kann ich meinen umständlichen Code wegschmeissen.
p.S. eleganter heisst für mich meistens kürzer, weniger Variablen und schneller ;)
Anzeige
AW: Wow
16.02.2011 16:32:46
Beverly
Hi Holger,
die Aufgabenstellung in der hochgeladenen Arbeitsmappe beinhaltet nicht, dass Teile einer Zelle als Autofilterkriterium benutzt werden sollen.
Auch wenn dies jetzt nicht in diesen Thread sondern in diesen https://www.herber.de/forum/archiv/1200to1204/t1201093.htm#1201178 gehört und sich auf ein völlig anderes Problem bezog - hier die Antwort zu deinem PS: beweise doch mal, dass mein Code langsamer als deiner ist. Außerdem hast du da m.E. nur eine Teil deines Codes gepostet - da fehlt wenigstens der gesamte Schleifendurchlauf, wenn nicht noch mehr. Somit steht dein Beweis noch aus, dess dein Code tatsächlich wesentlich kürzer ist und wesentlich weniger Variablen als meiner enthält.


Anzeige
AW: Wow
16.02.2011 21:03:14
Holger,
Hi Karin,
das ist natürlich nur subjektiv von mir empfunden, beweisen kann und will ich das natürlich nicht ;).
Lieben gruß
Holger
AW: Autofilter mit Doppelclick verändern?
16.02.2011 16:35:45
Peter
Hallo Karin
Super. Ich komme dem Ziel schon ganz nahe. In meiner Tabelle habe ich in Wirklichkeit 4 Spalten, die mit einem Autofilter belegt sind, wobei der 3 Filter in auf einer leeren Spalte steckt.
Ich habe eine Beispielmappe hochgeladen, um zu illustrieren, was ich erreichen möchte. Ich habe den Code erweitert, so dass die Filter 1, 2 und 4 abgefragt werden.
Mit der Datumsspalte habe ich noch ein Problem. Wenn ich
Doppelklick auf B5 vornehme und dann Doppelklick auf C6, dann sollten noch Zeilen 6 + 7 sichtbar sein. Die bleiben jedoch ausgeblendet, bis ich beim Filter in Spalte C "benutzerdefiniert" wähle und das Datum 31.01.2010, welches dort schon steht, bestätige.
Was muss ich ändern, damit diese Bestätigung nicht mehr nötig ist?
Danke und Gruss, Peter
https://www.herber.de/bbs/user/73585.xls
Anzeige
AW: Autofilter mit Doppelclick verändern?
16.02.2011 17:04:17
Beverly
Hi Peter,
wenn es ein Datum ist, werden vom Autofilter 2 Kriterien verlangt.
Man kann den Code noch etwas vereinfachen, indem man sich bei der Filterspalte auf die Target-Spalte bezieht. Deinen Code würde dann so aussehen:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, ActiveSheet.AutoFilter.Range) Is Nothing Then
If ActiveSheet.AutoFilter.Filters.Item(Target.Column - 1).On Then
Range("Filter1").AutoFilter Field:=Target.Column - 1
Else
If IsDate(Target) Then
Range("Filter1").AutoFilter Field:=Target.Column - 1, Criteria1:="=" & Target, _
Operator:=xlAnd, Criteria2:="=" & Target
Else
Range("Filter1").AutoFilter Field:=Target.Column - 1, Criteria1:="=" & Target, _
Operator:=xlAnd
End If
End If
Cancel = True
End If
End Sub



Anzeige
AW: Autofilter mit Doppelclick verändern?
16.02.2011 17:50:20
Peter
Hallo Karin
Danke vielmals. Alles funktioniert, ausser dass ich bei der Datumsspalte immer noch "benutzerdefiniert" anwählen muss und ohne etwas einzugeben, "OK" drücke.
Ein kleines Problem, angesichts dieser super Lösung, doch ich lasse den Thread noch offen.
Gruss, Peter
AW: Autofilter mit Doppelclick verändern?
16.02.2011 18:26:38
Beverly
Hi Peter,
jede Excel-Version ist leider anders - in 2010 funktioniert der Code fehlerfrei.
So sollte er auch in 2003 das korrekte Ergebnis liefern:
            Range("Filter1").AutoFilter Field:=Target.Column - 1, Criteria1:=">=" & _
Target.Value2, Operator:=xlAnd, Criteria2:="



Anzeige
AW: Autofilter mit Doppelclick verändern?
16.02.2011 23:04:50
Peter
Hallo Karin
Vielen Dank, so klappts auch in Excel 2003.
Vielleicht interessierts ja sonst jemand noch:
Ich habe nun diese Filter Funktion vom benannten Range "Auto_Filter" abhängig gemacht. Unabhängig, welche Spalten dieser einschliesst, funktioniert das Ding. Nur wenn der Name "Auto_Filter" nicht definiert ist, passiert nichts.
Gruss, Peter
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim lngOffSet As Long  ' Anzahl Spaltenverschiebung, falls Range "Auto_Filter" nicht in Spalte  _
A beginnt zuweisen
If IsRangeName("Auto_Filter") = False Then Exit Sub
If AutoFilterMode = False Then Range("Auto_Filter").AutoFilter
lngOffSet = Range("Auto_Filter").Column - 1
If Not Intersect(Target, Range("Auto_Filter")) Is Nothing Then
If Not Intersect(Target, ActiveSheet.AutoFilter.Range) Is Nothing Then
If ActiveSheet.AutoFilter.Filters.Item(Target.Column - lngOffSet).On Then
Range("Filter1").AutoFilter Field:=Target.Column - lngOffSet
Else
If IsDate(Target) Then
Range("Filter1").AutoFilter Field:=Target.Column - lngOffSet, Criteria1:=">=" &  _
_
Target.Value2, Operator:=xlAnd, Criteria2:="
'----------------------------------------
in Modul
'----------------------------------------
Public Function IsRangeName(RangeName As String) As Boolean
On Error Resume Next
IsRangeName = Len(Names(RangeName).Name)  0
End Function

Anzeige
AW: Autofilter mit Doppelclick verändern?
17.02.2011 09:20:10
Beverly
Hi Peter,
wozu einen extra Filter-Bereich definieren? Excel erkennt doch automatisch, was der Filterbereich ist und mit der Zeile
If Not Intersect(Target, ActiveSheet.AutoFilter.Range) Is Nothing Then

bezieht sich der Code genau auf diesen Bereich.


AW: Autofilter mit Doppelclick verändern?
17.02.2011 09:35:27
Peter
Hallo Karin
Ich habe die verbleibenden "Filter1" im zuletzt geposteten Code durch "Auto-Filter" ersetzt. Nun kann ich irgendwo in der Tabelle den Bereich "Auto_Filter" setzen und muss beispielsweise bei "Target.Column" nicht mehr -2 anfügen, wenn der die erste Spalte, die gefiltert wird, die Spalte C ist, da dies nun durch die Variable lngOffset abgefangen wird, die ich über den Range "Auto_Filter" definiert habe.
Vielleicht eine Spielerei - aber ich habe zumindest Freude daran.
Gruss, Petere
AW: Autofilter mit Doppelclick verändern?
17.02.2011 10:22:14
Beverly
Hi Peter,
das lässt sich auch ohne benannten Bereich lösen, man muss nur die 1. Spalte des Filterbereichs ermitteln mit ActiveSheet.AutoFilter.Range.Columns(1).Column. Der Code würde dann so aussehen:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, ActiveSheet.AutoFilter.Range) Is Nothing Then
If ActiveSheet.AutoFilter.Filters.Item(Target.Column - _
ActiveSheet.AutoFilter.Range.Columns(1).Column + 1).On Then
ActiveSheet.AutoFilter.Range.AutoFilter Field:=Target.Column - _
ActiveSheet.AutoFilter.Range.Columns(1).Column + 1
Else
If IsDate(Target) Then
ActiveSheet.AutoFilter.Range.AutoFilter Field:=Target.Column - _
ActiveSheet.AutoFilter.Range.Columns(1).Column + 1, _
Criteria1:=">=" & Target.Value2, Operator:=xlAnd, Criteria2:="



AW: Elegante Lösung!
17.02.2011 10:52:16
Peter
Hallo Karin
Vielen Dank. Das ist natürlich eleganter.
Gruss, Peter
AW: Elegante Lösung!
21.02.2011 11:37:47
Peter
Hallo Karin
Ich habe nun noch IsDate(Target) durch IsNumeric(Target) ersetzt, damit die Filterung auch bei Beträgen funktioniert.
Gute Woche und freundlicher Gruss, Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige