Страницы: 1
RSS
Список по условию из двумерного массива
 
Друзья! Помогите с задачей, пожалуйста) Все делаю по статьям про выведение списка, но никак не могу ограничить ПЕРВОЕ выполнение условия.
Есть список фамилия и график, кто к какой группе принадлежит. Критерии определения: диапазон дат - это работает, совпадение строк - это работает.
Никак не получается находить только первое попадание (строки именно в этот диапазон, до этого первое совпадении строки может встречаться и раньше).
В эксельке сделала два варианта: 1 - если формулами массива, но построчно, но тогда не получается вывести список без пробелов, просто не попавшие остаются пробелами. 2 - если формулами массива как в статьях, и все правильно работает, просто в массиве НАИМЕНЬШИЙ встречаются повторы (сколько в строке было совпадений из указанного диапазона, сколько раз он фамилию потом и пишет).
Подскажите, пожалуйста, как поправить первую или вторую формулу, чтобы у меня получался нормальный список фамилий без пробелов и повторений с нужной строки. Ну или как считать только первое попадание в диапазон при формуле двумерного массива во втором способе)

Спасибо большое!  
 
Длиный
=IFERROR(INDEX(Names;SMALL(IF(MMULT((INDEX(Timeline;;$D$2-7):INDEX(Timeline;;$D$3-7)="V")+(INDEX(Timeline;;$D$2-7):INDEX(Timeline;;$D$3-7)="C")+(INDEX(Timeline;;$D$2-7):INDEX(Timeline;;$D$3-7)="CH");ROW($A$1:INDEX(A:A;$D$3-$D$2+1))^0);ROW(Timeline)-ROW(Dates));ROW(A1)));"")

Покороче
=IFERROR(INDEX(Surnames_test;SMALL(IF(MMULT(--ISNUMBER(FIND(";"&INDEX(Timeline;;$D$2-7):INDEX(Timeline;;$D$3-7)&";";";V;C;CH;"));ROW($A$1:INDEX(A:A;$D$3-$D$2+1))^0);ROW(Timeline)-ROW(Dates));ROW(A1)));"")
Изменено: БМВ - 24.11.2019 08:12:31
По вопросам из тем форума, личку не читаю.
 
БМВ, а перемножить какую матрицу на какую? Или на что надо умножить полученную матрицу (где 0 не прошло по условиям, 1 - подходит по условия), чтобы получиь только первые вхождения единицы в матрицу?
Подставляю в свою, как понимаю, но у меня все равно получается множество одинаковых фамилий, как в эксель во втором способе.
Скорее всего, неверно ставлю аргументы в MMULT, что там должно быть?
Спасибо!
 
=ЕСЛИОШИБКА(ИНДЕКС(schedule!B:B;НАИМЕНЬШИЙ(ЕСЛИ(МУМНОЖ(ЕСЛИОШИБКА(ПОИСКПОЗ(СМЕЩ(schedule!A$1;6;D$2-1;E$2;D$3-D$2);{"V";"C";"CH"};)^0;);СТРОКА(СМЕЩ(A$1;D$2-1;;D$3-D$2))^0);СТРОКА(СМЕЩ(A$1;6;;E$2)));СТРОКА(СМЕЩ(A$1;;;E$2))));"")
Код
=ЕСЛИОШИБКА(ИНДЕКС(schedule!B:B;НАИМЕНЬШИЙ(ЕСЛИ(МУМНОЖ(ЕСЛИОШИБКА(ПОИСКПОЗ(ИНДЕКС(schedule!$A:$AAA;7;D$2):ИНДЕКС(schedule!$A:$AAA;E$2;D$3);{"V";"C";"CH"};)^0;);СТРОКА(ИНДЕКС(A:A;D$2):ИНДЕКС(A:A;D$3))^0);СТРОКА($A$7:ИНДЕКС(A:A;E$2)));СТРОКА($A$1:ИНДЕКС(A:A;E$2-6))));"")
Изменено: Андрей Лящук - 24.11.2019 10:30:17
 
Выше открыл, ну и естественно не летучие.
По вопросам из тем форума, личку не читаю.
 
БМВ, прошу прощения, что только сейчас, но спасибо огромное, все сработало, использовала более короткий вариант в практике, тестировала оба :) осталось разобраться как это работает, чтобы повторить в других задачах. Еще раз огромное спасибо!
Страницы: 1
Наверх