Показати інформацію про фільтри стовпців Excel у клітинках


4

У нас є аркуш з величезною кількістю стовпців, і фільтрація часто використовується для навігації до правильних даних. Проблема полягає в тому, що іноді не очевидно, що фільтр застосовано, зоровий сигнал дуже тонкий. Чи можна показати якісь дані за допомогою формули або VBA про фільтр всередині іншої комірки?

Щось на зразок цього:

Просто знати, чи є фільтр активним, було б гарною підмогою, знаючи, у яких стовпцях застосовано активні фільтри, було б обмерзання на торті. В ідеалі вони оновлюються автоматично.

Я не маю права власності на електронну таблицю, тому я не можу вносити серйозні зміни в її структуру або що-небудь, але VBA добре.

Будь-які ідеї?

Відповіді:


4

Я вважаю, що це можливо лише за допомогою VBA.

Я також вважаю, що вам не потрібно перевіряти, чи застосовано автофільтр у правильному діапазоні (див. Подальше читання), і що вам не доведеться перевіряти, чи функція AUTOFILTER активна чи ні (тобто немає стрілок, немає автофільтра) .

Ось визначена користувачем функція, яка перевіряє, чи є якісь активні фільтри на робочому аркуші, а якщо такі є, відображає, які стовпці були відфільтровані. Я впевнений, що там є кращі функції; вам може знадобитися змінити його відповідно до ваших потреб.

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

Щоб скористатися ним, введіть ff. формула в порожню клітинку:

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

Де A3:E3містяться мітки стовпців для ваших даних (див. Приклад нижче)

&LEFT(SUBTOTAL(9,A3:A48),0)Частина формули не служить ніякої видимої мети, крім як змусити клітини переоцінювати «автоматично» , як ви зміните фільтри. ( Подяка Шену Чеширу за те, що він запропонував це). Зауважте, що це краще, ніж описане тут рішення, оскільки воно перераховує лише тоді, коли діапазон, визначений вашими параметрами, змінюється.

ПРИКЛАДИ

З фільтрами:
введіть тут опис зображення

Автофільтр увімкнено, але стовпці не фільтруються:
введіть тут опис зображення

Використовується при умовному форматуванні:
введіть тут опис зображення

ПОДАЛЬШЕ ЧИТАННЯ

Як користуватися автофільтрами в Excel VBA Macros
AutoFilter Object (Довідник мови Excel 2003 VBA)


Фантастичний. Єдине питання - оновлення fstate. Якщо я зміню фільтр, рядок фільтра не оновлюється. Я можу, здається, викликати оновлення лише змінивши формулу CheckFilters у комірці. Чи є якесь налаштування, щоб змусити цю функцію оцінювати при зміні фільтра?
Алекс

Я підтвердив, поставивши точку розриву у VBA, що функція запускається лише тоді, коли клітинка CheckFilters модифікується (скажімо, регулюючи діапазон). Зміна фільтра не запускає функцію.
Алекс

@ Алекс Я розбираюся в автоматичному оновленні формули. Ви можете спробувати змінити функцію в підпрограму, яка виконується при запуску події Workbook_SheetCalculate.
Ellesa

2
вирішення цього =CheckFilters(A3:E3) & &LEFT(SUBTOTAL(9,A5:A200),0) дійсно
SeanC

@Sean - Це чудово. Я перевірив інше рішення, але ефективність була повільнішою: якщо я вставляю "Application.Volatile" і запускаю свою функцію, як тут: stackoverflow.com/questions/11045/…, то вона переоцінюється правильно, без зайвої частини формули. Продуктивність страждає, тому що двигун excel не здається досить розумним, щоб лише переоцінити UDF для діапазону, який він визначений. Ваше рішення працює лише тоді, коли фільтр змінено, що ідеально.
Алекс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.