У меня есть таблица данных, которая разделена, скажем, «блоками» строк. Как вы можете видеть на изображении, начиная с столбца D (A1) есть некоторые значения в первой строке, затем 5 строк пустые, а затем снова значения 7-й строки и так далее … это то, что я называю блоком строк , всегда в интервале sam.
Я хотел добиться следующего:
- Столбец I (D1) должен быть моим столбцом «фильтра», в котором я хочу выбрать несколько значений, одно или несколько не имеют значения.
- Когда я выбрал несколько «значений», данные будут отфильтрованы, как обычно в таблицах Excel, но я хотел иметь возможность всегда оставлять видимым тот блок строк, который соответствует, не только строку или две, но и весь блок, даже если 90% будут пустыми ячейками или нет. Остальные можно удалить или скрыть, но с возможностью вернуть их при выборе или отмене выбора.
- Важно всегда сохранять блок из этих 6 строк, или может быть два или три блока, если значения включены в другие блоки. И когда в других блоках нет совпадений, это должно быть «скрыто»
- Я пробовал использовать вспомогательные столбцы, такие как столбцы A, B и C, но безуспешно, пытался как-то их объединить, но безуспешно.
- Конечно, я добавил цвет, чтобы их пометить, но можно и без него, важно, чтобы фильтр был на 100% правильным.
Помощник1:
=MOD(SUMPRODUCT(($D$5:$D5<>$D$4:$D4)*1);2)=0
Вот что сейчас в CF в виде формулы:
=$I5=$I$3
Я не разбираюсь в VBA, если это вариант, но с другой стороны я видел, что это можно сделать и с помощью CF …
1 ответ
Я счел полезным создать индекс для «группы» из 6 строк по следующей формуле:
=ROUNDUP((ROW()-1)/6,0)
Я уверен, что есть несколько способов сделать следующую часть, но это тот, который пришел мне в голову в первую очередь.
Подсчитайте строки, которые имеют ту же группу, что и текущая строка, и где значения в столбце D могут быть найдены в списке фильтров в столбце J. Поскольку список фильтров может содержать более одной ячейки, это вернет массив длина такая же, как у списка фильтров, и где каждый элемент является целым числом, представляющим количество элементов фильтра в группе. Итак, если группа содержала 0528
дважды и 0342
один раз, и фильтр должен был найти оба 0528
и 0342
, то COUNTIF
вернется {2,1}
:
Я использовал TRANSPOSE
здесь, чтобы проиллюстрировать результаты каждой строки. Эта формула находится в столбце G:
=TRANSPOSE(COUNTIFS($E$2:$E$19,$E2,$D$2:$D$19,$J$1:$J$2)
Итак, если я просто хочу, чтобы одно значение указывало на то, что строка что-то нашла, я могу суммировать этот массив и сравнить сумму с 0. Если сумма больше нуля, то я нашел по крайней мере один элемент фильтра в группе, а затем можно фильтровать всю группу.
=SUM(COUNTIFS($E$2:$E$19,$E2,$D$2:$D$19,$H$1:$H$2))>0
Обратите внимание, что TRANSPOSE
на самом деле не нужно, поэтому я удалил его.
Возможно, мы могли бы встроить групповой расчет в формулу фильтра, но я думаю, что было бы лучше оставить его там, где он есть, поскольку он может быть полезен для других расчетов.
О чувак! Это было в основном то, что я хотел. Это открывает мне новый способ достижения моих целей: использование условного форматирования, макрос записи и некоторого обходного пути приведет меня туда, куда я хотел. Я знал, что это сложно, но спасибо за ваш большой вклад !!!
— Мирза
4 часа назад