4

Рассмотрим электронную таблицу, которая начинает выглядеть так:

Образец оригинальной таблицы

Я хочу иметь возможность фильтровать имя 1 в левой колонке, и это будет выглядеть так:

Образец отфильтрованной таблицы

Да, я понимаю, что простым ответом является фильтрация по Имени 1 и Заголовку, но у меня есть другие люди, использующие эту таблицу, которые, похоже, этого не понимают. Итак, как я могу сделать его безошибочным для них и сделать невозможным отфильтровывать строки с заголовком в левом столбце?

Обратите внимание: за пределами упрощенного примера показаны факторы, объясняющие, почему они идут вниз, а не переходят.

4 ответа4

1

Ну, во-первых, это не то, как Excel будет ожидать ваших данных, поэтому вам, скорее всего, придется использовать некоторый VBA-макрос для решения этой проблемы описанным вами способом.

Excel ожидает, что такие данные будут расположены следующим образом:

Заголовок; Метрика 1; Метрика 2; Метрика 3

И было бы даже проще создать результат, как вы просили, когда необработанные данные будут в таком порядке.

Однако, чтобы решить это как макрос, вам нужно получить список ваших имен, создать диалоговое окно для выбора имени, создать базовый макрос, который будет принимать имя, добавить заголовок, автоматически создать фильтр и создать кнопку или короткий, чтобы назначить его с помощью макроса.

Другим способом может быть использование расширенного фильтра: http://office.microsoft.com/en-us/excel-help/filter-by-using-advanced-criteria-HP005200178.aspx

Есть только некоторые ошибки с поведением обновления, но мне удалось запустить это с этой настройкой:

Table1:

A      | B        | C
-----------------------------------------------
Header | Metric 1 | Name1 (this is your filter)
Name 1 | 100      |
Name 2 | 300      |
Name 3 | 200      |

Table2:

A
----------------
Header
="=" & Table1!C1
'=Header

Затем вы настраиваете дополнительный фильтр для Table1!A1:B4 и с критериями таблицы 2!A1:A3.

Это ваши варианты, я бы сказал.

1

Наилучшим подходом было бы сделать его именованным диапазоном или таблицей для расширяемого диапазона и ссылаться на диапазон вместо указанного объявленного диапазона.

С этим, как говорится:

Range("Table2").AutoFilter 1, "header", xlOr, "Name1", False

Это работает, если у вас есть только два основных критерия. Если вам нужно более двух критериев, возможно, стоит взглянуть на реструктуризацию вашего NamedRange/Table, чтобы вы могли отфильтровать различные поля / столбцы.

Отредактировано 2012-10-15 @ 15:29

Провел дополнительное исследование для моих личных нужд и обнаружил, что вы также можете сделать это, если у вас есть несколько (более 2) критериев, которые включают:

Range("Table2").AutoFilter Field:=1, Criteria1:=Array("val1", "val2"), Operator:=xlFilterValues

Ссылка: VBA Советы и хитрости - Excel VBA Автофильтр: несколько критериев

1

я предлагаю изменить ваш дизайн представления данных

или, по крайней мере, использовать третий столбец с такой формулой, чтобы пользователи увидели имя метрики, даже если они фильтруют только имя =IF(A2="Header";B2;C1)

0

Простое (если несовершенное) решение - после слова «Заголовок» просто введите пробел, а затем «Метрика 1», затем измените цвет текста Метрики 1 в соответствии с фоном ... в данном случае белым. Он становится невидимым, но все равно будет отображаться в фильтре, если он выбран. Вы просто должны помнить, чтобы отметить оба поля «Заголовок» и «Метрика заголовка 1» в фильтре ... отсюда и несовершенство.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .