Страницы: 1
RSS
Поиск по двум таблицам по разным условиям, без макросов
 
Добрый день!

Есть «Реестр» операций, в котором наряду с другими данными есть три текстовых столбца «Контрагент», «Статья Бюджета» и «Группа Статей Бюджета». Надо заполнить текстовый столбец «Группа Статей Бюджета». Есть две таблицы соответствия  этих параметров: «Исключения» и «Обычная зависимость». Сложность в том, что при разных комбинациях «Контрагент» - «Статья» надо искать значения «Группы» в разных таблицах соответствия. Задачу надо решить без макросов.

Коротко алгоритм поиска выглядит так: Если текущая пара "Контрагент-Статья Бюджета" есть в таблице "Исключения", то Группа выбирается из таблицы "Исключения"; иначе - Группа выбирается из таблицы "Обычная зависимость".

У меня есть решение задачи, но я не уверен, что оно хорошее. С точки зрения быстродействия. У меня в этом файле около 6000 строк в «Реестре» и еще много других формул массива и формул СУММЕСЛИМН и СУММПРОИЗВ. Обсчет файла занимает около минуты. (Excel 2016).

Понимаю, что быстродействие - это отдельная задача, но все же прошу уважаемое сообщество посмотреть, может кто-то предложит более эффективный способ. В файле - 2 листа: описание задачи и мое решение.

Заранее большое спасибо.

 
Добрый вечер, avbook,
А ведь вопрос-то Ваш с точки зрения быстродействия как раз намного интереснее:)
Мой Вам вариант такой
=ЕСЛИОШИБКА(ПРОСМОТР(;0/(2=МУМНОЖ(СЧЁТЕСЛИ(B3:C3;$I$3:$J$5);{1:1}));$K$3:$K$5);ИНДЕКС($G$3:$G$7;ПОИСКПОЗ(C3;$F$3:$F$7;)))
Немассивный ввод и всё такое.
Но вот реально интересно. Как "тормозной "мумнож" сотрудничает с быстрым "Счётесли"...
Интересно почитать мнения от множественных ГУРУ
Изменено: Akropochev - 09.07.2018 21:46:24
 
А если такая обычная формула
Код
=IFERROR(INDEX(K$3:K$6000;MATCH(1;INDEX((J$3:J$6000=B3)*(I$3:I$6000=C3);0);0));INDEX(G$3:G$6000;MATCH(C3;F$3:F$6000;0)))
 
Еще вариант с именованной формулой.
Код
=ЕСЛИ(СЧЁТЕСЛИМН($I$3:$I$5;C3;$J$3:$J$5;B3);ИНДЕКС($K$1:$K$5;Поз);ВПР(C3;$F$3:$G$7;2;))
Поз=
Код
=ПОИСКПОЗ(Решение!C3&Решение!B3;Решение!$I$1:$I$5&Решение!$J$1:$J$5;0)
 
Всем - всем Большое спасибо!
Наверное можно (не против Правил?) поделиться формулами, которые мне в другом Форуме написали

Формула массива
Код
=ЕСЛИОШИБКА(ИНДЕКС(Исключения;ПОИСКПОЗ(C3&B3;I$3:I$5&J$3:J$5;);3);ВПР(C3;F$3:G$7;2;))

Обычная формула
Код
=ЕСЛИОШИБКА(ПРОСМОТР(;-1/(C3&B3=I$3:I$5&J$3:J$5);K$3:K$5);ВПР(C3;F$3:G$7;2;))
Страницы: 1
Наверх