Pokaż informacje o filtrze kolumny Excel w komórkach

4

Mamy arkusz z ogromną liczbą kolumn, a do nawigacji do właściwych danych często używa się filtrowania. Problem polega na tym, że czasami nie jest oczywiste, że zastosowano filtr, wizualna wskazówka jest bardzo subtelna. Czy można wyświetlić pewne dane za pomocą formuły lub VBA na temat filtra w innej komórce?

Coś takiego:

Samo sprawdzenie, czy filtr jest aktywny, byłoby dobrą pomocą, wiedząc, które kolumny mają aktywne filtry zastosowane do nich, byłyby wisienką na torcie. Idealnie aktualizują się automatycznie.

Nie mam prawa własności do arkusza kalkulacyjnego, więc nie mogę wprowadzać większych zmian w jego strukturze ani nic, ale VBA jest w porządku.

Jakieś pomysły?

Alex
źródło

Odpowiedzi:

4

Wierzę, że jest to możliwe tylko z VBA.

Zakładam również, że nie trzeba sprawdzać, czy autofiltr jest zastosowany w prawidłowym zakresie (patrz Dalsza lektura) i że nie trzeba sprawdzać, czy AUTOFILTER jest aktywny, czy nie (tj. Brak strzałek, brak autofiltru) .

Oto funkcja zdefiniowana przez użytkownika, która sprawdza, czy w arkuszu są jakieś aktywne filtry i, jeśli takie istnieją, wyświetla, które kolumny zostały odfiltrowane. Jestem pewien, że istnieją lepsze funkcje; być może trzeba go zmodyfikować, aby dostosować do własnych potrzeb.

Function CheckFilters(r As Range) As String

Set AWS = ActiveSheet
fstate = ""

If AWS.FilterMode Then
    c = AWS.AutoFilter.Filters.Count

    'go through each column and check for filters
    For i = 1 To c Step 1
       If AWS.AutoFilter.Filters(i).On Then
            fstate = fstate & r(i).Value & ", "
       End If
    Next i

    'removes the last comma
    fstate = Left(fstate, Len(fstate) - 2) 
Else
    fstate = "NO ACTIVE FILTERS"
End If

CheckFilters = fstate

End Function

Aby go użyć, wpisz ff. formuła do pustej komórki:

=CheckFilters(A3:E3)&LEFT(SUBTOTAL(9,A3:A48),0)

Gdzie A3:E3zawiera etykiety kolumn dla danych (patrz przykład poniżej)

&LEFT(SUBTOTAL(9,A3:A48),0)Część wzoru nie służy żadnemu celowi widoczny inny niż zmusić komórkę do ponownej oceny „automatycznie”, jak zmienić filtry. (Podziękowania dla Seana Cheshire za sugestię). Zauważ, że jest to lepsze niż opisane tutaj rozwiązanie , ponieważ przelicza się ono tylko wtedy, gdy zmienia się zakres zdefiniowany w parametrach.

PRZYKŁADY

Z filtrami:
wprowadź opis zdjęcia tutaj

Autofiltr jest włączony, ale żadne kolumny nie są filtrowane:
wprowadź opis zdjęcia tutaj

Używany z formatowaniem warunkowym:
wprowadź opis zdjęcia tutaj

DALSZE CZYTANIE

Jak korzystać z filtrów automatycznych w makrach programu Excel VBA Makra
Obiekt filtrów automatycznych (Dokumentacja językowa Excel 2003 VBA)

Ellesa
źródło
Fantastyczny. Jedynym problemem jest aktualizacja fstate. Jeśli zmienię filtr, ciąg filtru nie zostanie zaktualizowany. Mogę tylko wywołać aktualizację, zmieniając formułę CheckFilters w komórce. Czy jest jakieś ustawienie, które zmusza tę funkcję do oceny zmiany filtra?
Alex
Potwierdziłem, umieszczając punkt przerwania w VBA, że funkcja jest wyzwalana dopiero po zmodyfikowaniu komórki CheckFilters (powiedzmy przez dostosowanie zakresu). Zmiana filtra nie uruchamia funkcji.
Alex
@Alex Zajmę się automatyczną aktualizacją formuły. Możesz spróbować zmienić funkcję w podprogram, który jest wykonywany po uruchomieniu zdarzenia Workbook_SheetCalculate.
Ellesa
2
obejściem tego jest =CheckFilters(A3:E3) & &LEFT(SUBTOTAL(9,A5:A200),0) naprawdę każda funkcja, która powoduje, że dokonuje ponownej oceny przy zmianie arkusza kalkulacyjnego
SeanC
@Sean - To jest świetne. Przetestowałem inne rozwiązanie, ale wydajność działała wolniej: jeśli wstawię „Application.Volatile” i początek mojej funkcji, jak tutaj: stackoverflow.com/questions/11045/…, to zostanie ona ponownie poprawnie oszacowana bez dodatkowej części formuły. Wydajność spada, ponieważ silnik programu Excel nie wydaje się wystarczająco inteligentny, aby ponownie ocenić UDF tylko dla zakresu, w którym jest zdefiniowany. Twoje rozwiązanie działa tylko wtedy, gdy filtr jest zmieniany, co jest idealne.
Alex