Я столкнулся с чем-то, что не могу объяснить, пытаясь отфильтровать огромный массив данных с помощью расширенного фильтра...
У меня был документ с сотнями тысяч строк (.xlsb), содержащий целую кучу продуктов с их различными атрибутами. Один элемент, одна строка, атрибуты в столбцах. Я хотел отфильтровать (удалить из списка) элементы, которые имели Y в одном из столбцов (другой вариант — N), а также элементы, которые были любым из пары брендов (другой столбец)итакже в данной категории (еще один столбец). Другими словами, я хотел удалить все, что имеет Y в столбце V, а также все, что имеет AAA в столбце Cи1A2B в столбце D.
Сначала я создал фильтр Y: я поместил ="=N" в этот столбец наверху и протестировал его, и он отлично работал. Все, что было с Y в этом столбце, было удалено, пока все хорошо.
Затем я добавил один бренд (AAA) в его собственный столбец, поместил <>1A2B в другой и снова запустил фильтр. Вместо того, чтобы сначала отфильтровать первую строку (Y), а затем из оставшихся элементов отфильтровать те, которые были заданного бренда (AAA) и заданной категории (1A2B), он полностью проигнорировал вторую строку. Ничего не изменилось.
Я даже попробовал добавить ="=N" в столбец V, просто чтобы убедиться, но это ничего не изменило.
Фильтр категории, сам по себе, работает как и ожидалось. Фильтр Y/N, сам по себе, тоже работает нормально. Но по какой-то причине при объединении выполняется только более широкий фильтр. Есть идеи?
В конце концов, мне удалось заставить это работать, перечислив каждый возможный бренд (AAA, AAB, AAC и т. д.) по отдельности, с ="=N" в столбце V. Таким образом, он индивидуально "разрешал" каждый бренд с N в нем, но это далеко не идеальное решение. Я надеялся, что наличие только ="=N" в строке даст тот же результат, но, видимо, нет.
решение1
Вместо того, чтобы пытаться сделать это с ужасно сложными фильтрами, гораздо лучше, предполагая, что вы можете свободно добавлять еще один столбец, создать столбец с формулой, которая равна true или false (или Y/N или как вам больше нравится). Тогда вы сможете очень легко применить фильтр только к этому столбцу.
решение2
Думаю, я понял, что вы пытаетесь сделать с помощью Расширенного фильтра.
Вам нужно использовать одну строку для ваших критериев, потому что каждая строка является ИЛИ с другими. Это означает, что когда вы делаете расширенный фильтр, вы получаете строку, если она соответствует критериям в любой из строк критериев. Если вам нужен зависимый критерий, такой как "НЕ И", то вам нужно поместить этот критерий в новый столбец и сделать так, чтобы ваша формула ссылалась на вашу первую строку данных.
В следующем макете нам нужны те, у которых в столбце B есть «N», а в столбце C — «AAA», то они нам нужны только в том случае, если в столбце D нет «1A2B». Поэтому в столбце E мы помещаем новую формулу следующего вида:=NOT(AND(C5="AAA",D5="1A2B"))
Если вы это сделаете и запустите расширенный фильтр, вы отфильтруете строки 5–7, у которых Beta = Y, а также отфильтруете строки 9 и 13.
|A |B |C |D |E
--+------+------+------+------+-------
1|Alpha |Beta |Gamma |Delta |Epsilon
2| |N | | |FALSE
3| | | | |
4|Alpha |Beta |Gamma |Delta |
5|Andy |Y |AAA |1A2B |
6|Bob |Y |BBB |1A2B |
7|Chad |Y |AAA |ZZ00 |
8|Duke |N |BBB |ZZ00 |
9|Ed |N |AAA |1A2B |
10|Frank |N |BBB |1A2B |
11|Gus |N |AAA |ZZ00 |
12|Herb |N |BBB |ZZ00 |
13|Indy |N |AAA |1A2B |
14|John |N |BBB |1A2B |
15|Kirk |N |AAA |ZZ00 |
16|Luke |N |BBB |ZZ00 |
Другой вариант — использовать три ряда критериев ( <>AAA
& <>1A2B
, AAA
& <>1A2B
, <>AAA
& 1A2B
), но это очень плохо масштабируется и становится громоздким.