Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1500to1504
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
"Klickfilter" die zweite
02.07.2016 12:31:03
MB12
Hallo zusammen,
den neuen Thread habe ich eröffnet, um nicht nochmal den alten von Louis durcheinander zu bringen.
KlausF hat eine richtig schöne und brauchbare Filtermöglichkeit eingebracht:

„…Zuerst in J1 auf ON stellen, danach eine beliebige Ziffer in A anklicken.
Diese Art der Filterung gilt für alle Spalten. Eine gefilterte Spalte wird
durch einen gelben Kopf dargestellt. Ein Klick in den Kopf und der Filter
wird zurückgesetzt. Wenn J1 auf OFF findet keine Filterung statt.“

https://www.herber.de/bbs/user/106660.xls
…..
Da ich diese Lösung mehrfach einsetzen könnte, habe ich es getestet. Funktioniert leider bei mir nicht bei „Zahlen“ (nichts geändert, Format Standard, s. unten) mit Nachkommastellen.
Antworten auf Nachfrage:

KlausF: „….also bei mir funktioniert das auch mit Nachkommastellen.
Zellenformat steht auf Standard, wie Spalte F.
Mit "Zahl mit 2 Nachkommastellen" funktioniert es auch nicht. Komisch…“

und

Hallo! Der Fehler liegt wohl an der internen englischen Sprache von Excel. Für die Sortierung   _
_
sollte das Komma durch einen Punkt ersetzt werden (beim Criterium). Sieht dann in etwas so aus.  _
Criteria1:=Replace(deinwert, ",", ".")
siehe auch hier

https://www.herber.de/forum/archiv/940to944/942636_VBA_Autofilter_nimmt_keine_Komma_zahl.html
Der Code nach dem Anpassen behebt das Problem noch nicht (aber das könnte an meinen beschränkten VBA-Kenntnissen liegen):
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngF As Range
Dim rngFS As Range
Dim lRow As Long
Dim lCol As Long
Set rngF = ActiveSheet.AutoFilter.Range
Set rngFS = ActiveSheet.Range("FilterStatus")
lCol = rngF.Columns(1).Column - 1
lRow = rngF.Columns(1).Row
If Target.Count > 1 Then GoTo exitHandler
If Target.Address = rngFS.Address Then
If rngFS.Value = "On" Then
rngFS.Value = "Off"
Call ShowArrows(lRow, lCol)
Else
rngFS.Value = "On"
Call HideArrows(lRow, lCol)
End If
rngFS.Offset(1, 0).Activate
End If
If UCase(rngFS.Value) = "ON" Then
If Not Intersect(Target, rngF) Is Nothing Then
If Target.Row > lRow Then
'rngF.AutoFilter Field:=Target.Column - lCol, _
Criteria1:=Target.Value
'*******ersetzt durch**************:
rngF.AutoFilter Field:=Target.Column - lCol, _
Criteria1:=Replace(Target.Value, ",", ".")
Cells(lRow, Target.Column).Interior.ColorIndex = 36
ElseIf Target.Row = lRow Then
rngF.AutoFilter Field:=Target.Column - lCol
Cells(lRow, Target.Column).Interior.ColorIndex = xlNone
End If
End If
End If
exitHandler:
Exit Sub
End Sub
Sub HideArrows(lRow As Long, lCol As Long)
Dim c As Range
Dim i As Integer
i = Cells(lRow, lCol + 1).End(xlToRight).Column
Application.ScreenUpdating = False
For Each c In Range(Cells(lRow, lCol + 1), Cells(lRow, lCol + i))
c.AutoFilter Field:=c.Column, _
Visibledropdown:=False
c.Interior.ColorIndex = xlNone
Next
Application.ScreenUpdating = True
End Sub
Sub ShowArrows(lRow As Long, lCol As Long)
Dim c As Range
Dim i As Integer
i = Cells(lRow, lCol + 1).End(xlToRight).Column
Application.ScreenUpdating = False
For Each c In Range(Cells(lRow, lCol + 1), Cells(lRow, lCol + i))
c.AutoFilter Field:=c.Column, _
Visibledropdown:=True
c.Interior.ColorIndex = xlNone
Next
Application.ScreenUpdating = True
End Sub
Habe ich etwas falsch gemacht bzw. müsste man noch etwas ändern?
Zusatzfrage: Siehe Bemerkung von Klaus: Mit "Zahl mit 2 Nachkommastellen" funktioniert es auch nicht. Komisch…“
Ließe sich das auch beheben?
Nicht zu vergessen: Herzlichen Dank an Klaus und Matthias.
Gruß, Margarete

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "Klickfilter" die zweite
02.07.2016 13:47:44
Matthias
Hallo! Also habe es eben mal mit und ohne replace laufen lassen. Da geht eigentlich alles - auch wenn die Spalte als Text formatiert ist. Hast du die Möglichkeit für einen Screenshot oder die Datei hoch zu laden (bei mir geht aber nur xls)? Dann könnte man mal schauen, woran es ggf. hakt. VG

klar geht das; allerdings..
02.07.2016 14:07:31
MB12
habe ich an der heruntergeladenen Datei nichts geändert (bis auf den Code bei Criteria1)
Mein Setup - vor 3 Wochen komplett neu installiert : Win 7 Professional mit SP1 sowie dem "SP2" (Bundle) und Outlook 2010 Professional (32 Bit)
Keine Ländereinstellungen oder sonstige Standardeinstellungen geändert.
https://www.herber.de/bbs/user/106696.xls
Vielleicht kannst du trotzdem etwas damit anfangen. Danke, dass du dich damit beschäftigst.
Gruß, Margarete

Anzeige
AW: klar geht das; allerdings..
02.07.2016 15:43:09
Michael
Hi zusammen,
also, wenn ich das Setzen des Filters mit dem Makrorek. aufzeichne, kommt das hier raus...
 ActiveSheet.Range("$A$1:$G$50").AutoFilter Field:=6, Criteria1:="4,99"

woran sich unschwer feststellen läßt, daß das Kriterium ein STRING ist, keine Zahl.
Entsprechend funktioniert das Ganze so ganz wunderbar:
If UCase(rngFS.Value) = "ON" Then
If Not Intersect(Target, rngF) Is Nothing Then
If Target.Row > lRow Then
rngF.AutoFilter Field:=Target.Column - lCol, _
Criteria1:=Target.Text   ' ***********************
Cells(lRow, Target.Column).Interior.ColorIndex = 36
ElseIf Target.Row = lRow Then
rngF.AutoFilter Field:=Target.Column - lCol
Cells(lRow, Target.Column).Interior.ColorIndex = xlNone
End If
End If
End If
Schöne Grüße,
Michael

Anzeige
die kleinen Tricks machen es..
02.07.2016 16:28:18
MB12
Hi Michael,
hab herzlichen Dank. Die Idee mit dem Makrorecorder muss ich mir unbedingt merken, Filter funktioniert perfekt.
Um die Anwendungsmöglichkeiten zu erweitern: Siehst du auch eine Möglichkeit, wenn ich die Spalten als Zahl (ja, mit Nachkommastellen) formatiere? Du kennst das ja: Man will weitere Auswertungen machen, und dann Text? Ich sage nur SVERWEIS und ähnliches.
Wenn nicht: Ich habe bisher auch ohne den Klickfilter gelebt...
Danke nochmal - natürlich auch Matthias - der hatte den "Text" auch erwähnt, ich habe nur nicht reagiert.
Gruß, Margarete
Gruß, Margarete

Anzeige
probieren geht über studieren,
02.07.2016 16:59:42
Michael
Margarete,
gell!
Also, bei mir geht's auch, wenn ich die Spalte als Zahl formatiere. Was darauf schließen läßt, daß der Filter intern immer der .text-Eigenschaft arbeitet.
Schönen Nachmittag noch & schöne Grüße,
Michael

pooinlich, denn sonst bin ich..
02.07.2016 17:54:00
MB12
die Queen of Testing. Ich hatte mir in meinem Laienkopf gedacht, dass mir das Makro die Zellen automatisch als Text formatiert - aber bitte nicht weitersagen.
Wenn i eana ned hätt....
Grüßle vom Dorf, Margarete
und: Island:Wales

das is das Fußballfieber,
03.07.2016 03:44:31
Michael
mach Dir nix draus...
Auf Island bin i aa g'schbannd
Ach, schwätzt Du au' so wie der Löw?
Hehe, gute Zeit, LG zurück,
M.

Anzeige
sprachliches Mimikri :-) owT
03.07.2016 11:30:50
MB12
Gruß :-)

AW: die kleinen Tricks machen es..
02.07.2016 17:36:42
Matthias
Hallo! Nochmals als Frage, hat das mit dem Filtern bei dir in Spalte G I (die zwei die im Beispiel mit Kommas waren) nicht geklappt oder hast du Testeingaben gemacht (wen ja wo)? Und wenn du den Filter auf off hast und den Filter einblendest (manuell) werden dir die Fiterwerte richtig angezeigt? VG

AW: die kleinen Tricks machen es..
02.07.2016 18:02:53
MB12
Hallo Matthias,
genau, nachdem der Filter in Spalte E funktionierte, hatte ich in Spalte F Ganzzahlen eingegeben, und das ging problemlos. In der OFF-Variante hat es immer funktioniert. Beim Schreiben verstehe ich erst deine Frage: demnach kann es nichts mit der US/D - Formatierung zu tun gehabt haben, richtig?
Aber der Trick, .Value durch .Text zu ersetzen, hat es gebracht. Ich kann die Einträge formatieren, wie ich möchte: es funktioniert (siehe Erklärung von Michael).
Liebe Grüße, Margarete
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige