Общее
В Excel есть полезная функция – ВПР. Позволяет на основе списка неких идентификаторов извлечь из таблицы значения атрибутов этих идентификаторов.
Сравнение ВПР с другими вариантами решения задачи:
- ВПР – подходит для небольших объемов данных. По опыту попытка получения данных по 100к значениям в таблице из 300к строк требовала неимоверное время для расчета и в результате пришлось решать задачу по-другому. Большей частью влияет таблица, в которой осуществляется поиск (в примере таблица с 300к строк). Hint: если нужно данные из одной книги скопировать без формул (в данном случае ВПР) в другую – можно использовать сохранение в CSV или промежуточное копирование в блокнот.
- скрипт bash/ruby/etc – т.к. большую часть времени работаю с консолью, этот вариант зачастую самый для меня простой. По сути подходит для любого объема данных, но большие сводки могут потребовать многопоточность (см. xargs, split) и решения сортировки данных после отработки разных потоков, что может потребовать больше времени, чем вариант с БД.
- БД (join) – создать две таблицы, сделать join на основе необходимого поля. Крайне рекомендую использовать как замену Excel в случае большого объема данных (больше 100к строк).
Пример
=ВПР(G2;table;2;ЛОЖЬ)
- G2 – столбец для поиска
- table – таблица в которой делается поиск
- 2 – столбец этой таблицы
- ЛОЖЬ – искать ли приближенное значение. Лучше не надо.
Особенности
В ВПР если не получается (отсутствует поле “присвоить имя” при ПКМ) присвоить имя таблице: Excel -> конструктор -> имя таблицы.
Особенности таблицы для поиска (в примере это table):
- проще всего задать имя таблицы если она большая (выделяем ячейки ctrl+a, ПКМ, “Присвоить имя”)
- задать таблицу через указание стобцов, а не значений таблицы, не получится т.к нужна именно таблица
- значения, по которым делается поиск, должно быть в первом столбце
- таблицу можно создать на отдельном листе
- как избавится от НД при впр (мешает сортировке по числам):
заменяем на “”
=ЕСЛИ(ЕОШИБКА(ВПР(A3;testtb;10;ЛОЖЬ));"";ВПР(A3;testtb;10;ЛОЖЬ))
или на ноль
=ЕСЛИ(ЕОШИБКА(ВПР(A3;testtb;10;ЛОЖЬ));0;ВПР(A3;testtb;10;ЛОЖЬ))
или даже на другой ВПР
=ЕСЛИ(ЕОШИБКА(ВПР(B2;test;4;ЛОЖЬ));ВПР(C2;testb;2;ЛОЖЬ);ВПР(B2;test;4;ЛОЖЬ))