Разделить список на два списка в зависимости от значения соседней ячейки - PullRequest
0 голосов
/ 25 июня 2018

Мне нужна небольшая помощь, у меня есть книга Excel с длинным списком клиентов, и в соседней ячейке есть эфир 1 или 0, в зависимости от того, заказал ли клиент в прошлом месяце.

Как я могу разделить этот список на 2 списка на другой странице, один из которых был заказан в прошлом месяце, а другой не заказан,

Я не могу использовать макросы из-за уровней безопасности на ПК.

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

См. Изображение ниже. Используя формулы массива ( Ctrl + Shift + Enter ), я ввел это в D2:D8:

=IFERROR(INDEX(A2:A8,SMALL(IF(B2:B8,ROW(A2:A8)-ROW(A1)),ROW(A2:A8)-ROW(A1))),"")

и это в E2:E8:

=IFERROR(INDEX(A2:A8,SMALL(IF(1-B2:B8,ROW(A2:A8)-ROW(A1)),ROW(A2:A8)-ROW(A1))),"")

enter image description here

Объяснение

Вот как Excel вычислит первую формулу:

=IFERROR(INDEX(A2:A8,SMALL(IF(B2:B8,ROW(A2:A8)-ROW(A1)),ROW(A2:A8)-ROW(A1))),"")
=IFERROR(INDEX(A2:A8,SMALL(IF({1;0;1;0;0;0;1},{2;3;4;5;6;7;8}-1),{2;3;4;5;6;7;8}-1)),"")
=IFERROR(INDEX(A2:A8,SMALL(IF({1;0;1;0;0;0;1},{1;2;3;4;5;6;7}),{1;2;3;4;5;6;7})),"")
=IFERROR(INDEX(A2:A8,SMALL({1;FALSE;3;FALSE;FALSE;FALSE;7},{1;2;3;4;5;6;7})),"")

Поскольку второй аргумент SMALL является массивом, он найдет 1-е, 2-е, 3-е и т. Д. Значение, игнорируя FALSE (для 4-го и 7-го значения он вернет #NUM!).

=IFERROR(INDEX(A2:A8,{1;3;7;#NUM!;#NUM!;#NUM!;#NUM!}),"")
=IFERROR({"A";"C";"G";#NUM!;#NUM!;#NUM!;#NUM!},"")
={"A";"C";"G";"";"";"";""}
0 голосов
/ 25 июня 2018

Попробуйте,

'for ones
=INDEX(A:A, AGGREGATE(15, 7, ROW(B$2:INDEX(B:B, MATCH(1E+99, B:B)))/(B$2:INDEX(B:B, MATCH(1E+99, B:B))=1), ROW(1:1)))
'for zeroes
=INDEX(A:A, AGGREGATE(15, 7, ROW(B$2:INDEX(B:B, MATCH(1E+99, B:B)))/(B$2:INDEX(B:B, MATCH(1E+99, B:B))=0), ROW(1:1)))

Конечно, вам придется изменить в соответствии с другим листом.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...