У меня возникает проблема с поиском в списке проверки данных Excel (выпадающем меню), например фильтром Excel, и выбором / отменой выбора одного или нескольких значений из одного и того же - PullRequest
0 голосов
/ 17 октября 2018

У меня есть лист в Excel, в котором я создал список проверки данных в одном столбце.Список имеет очень большое количество значений, поэтому прокрутить список очень утомительно.Я хочу реализовать функциональность, в которой будет окно поиска, для более быстрого поиска выпадающего значения.Также Если будут некоторые флажки, чтобы выбрать все или отменить выбор после результатов поиска.Я открыт для VBA подход, пожалуйста, помогите мне с тем же.

Заранее спасибо.

1 Ответ

0 голосов
/ 18 октября 2018

Со вчерашнего дня я размышлял над этим решением (исключительно на основе формул).

Я нашел решение, которое сначала позволяет создавать настраиваемые фильтры в списках, а затем проверять данные.вниз список выбирается из отфильтрованного списка.

(При необходимости вы можете просто скрыть эти вспомогательные столбцы отфильтрованного списка, поскольку, вероятно, у пользователя нет причин их видеть.)

См.ниже пример набора данных, который я создал, и несколько примеров фильтров.

enter image description here

Исходный список находится в столбце A, тогда столбцы C и E используют формулы для фильтрации списка слева.из этого, основываясь на критериях (желтые ячейки).

Вот формула массива у меня в ячейке C2:

= IFERROR(INDEX($A$2:$A$8,SMALL(IF(LEFT($A$2:$A$8,LEN($B$2))=$B$2,
  ROW($A$2:$A$8)-ROW($A$2)+1),ROW($A2)-ROW($A$2)+1)),"(no match)")

А вот формула массива у меня есть вячейка E2:

= IFERROR(INDEX($C$2:$C$8,SMALL(IF(LEN($C$2:$C$8)=IF($D$2=0,LEN($C$2:$C$8),$D$2),
  ROW($C$2:$C$8)-ROW($C$2)+1),ROW($C2)-ROW($C$2)+1)),"(no match)")

Я перетащил эти ячейки в строку 8.

Обратите внимание, что это формулы массива, поэтому вы должны нажать Ctrl + Shift + Введите на клавиатуре вместо простого нажатия Введите после ввода этой формулы.

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

Настройка отбрасывания проверки данныхВ раскрывающемся списке, я использовал эту формулу:

= OFFSET($E$2,0,0,IFERROR(MATCH("(no match)",$E$2:$E$8,0),ROW($E$8)-ROW($E$2)+2)-1,1)

Эта формула работает, возвращая список в столбце E, но возвращает список только до (и не включая) первого экземпляра где (no match) происходит.

См. Ниже, у меня есть это в ячейке G2 в моем примере электронной таблицы.

enter image description here

Примечание:OFFSET является изменчивым, и его, как правило, следует избегать, но, к сожалению, OFFSET - единственный вариант (который мне известен), который позволяет вам использовать раскрывающиеся списки переменной длины при проверке данных.

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

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


Фильтры не применяются enter image description here


Применены оба фильтра enter image description here


Применен только первый фильтр enter image description here


Применен только второй фильтр enter image description here

...