Аналог впр в excel
Exceltip
Блог о программе Microsoft Excel: приемы, хитрости, секреты, трюки
Формулы подстановки Excel: ВПР, ИНДЕКС и ПОИСКПОЗ
Если произвести поиск по функциям подстановки, Google покажет, что ВПР намного популярнее функции ИНДЕКС. Оно и понятно, ведь чтобы придать функции ИНДЕКС тот же функционал, что и ВПР, необходимо воспользоваться еще одной формулой – ПОИСКПОЗ. Что касается меня, было всегда непросто попробовать и освоить две новые функции одновременно. Но они дают больше возможностей и гибкости в создании электронных таблиц. Но обо всем по порядку.
Функция ВПР()
Предположим, у вас есть таблица с данными о работниках. В первой колонке хранится табельный номер сотрудника, в остальных – другие данные (ФИО, отдел и т.д.). Если у вас есть табельный номер, то можно воспользоваться функцией ВПР, чтобы вернуть определенную информацию о сотруднике. Синтаксис формулы =ВПР(искомое_значение; таблица; номер_столбца; [интервальный_просмотр]). Она говорит Excel: «Найди в таблице строку, первая ячейка которой совпадает с искомым_значением, и верни значение ячейки с порядковым номером номер_столбца».
Но случаются ситуации, когда у вас есть имя сотрудника и необходимо вернуть табельный номер. На рисунке в ячейке A10 – имя работника и требуется определить табельный номер в ячейке B10.
Когда ключевое поле находится правее данных, которые вы хотите получить, ВПР не поможет. Если, конечно, была бы возможность задать номер_столбца -1, тогда проблем бы не было. Одним из распространенных решений является добавление нового столбца A, копирование имен сотрудников в этот столбец, заполнить табельные номера с помощью ВПР, сохранить их как значения и удалить временную колонку A.
Функция ИНДЕКС()
Чтобы решить нашу проблему в один шаг, необходимо воспользоваться формулами ИНДЕКС и ПОИСКПОЗ. Сложность данного подхода заключается в том, что требуется применить две функции, которые, возможно, вы никогда не применяли до этого. Для упрощения понимания решим эту задачу в два этапа.
Начнем с функции ИНДЕКС. Кошмарное название. Когда кто-нибудь говорит «индекс», у меня в голове не возникает ни единой ассоциации, чем же занимается эта функция. А требует она целых три аргумента: =ИНДЕКС(массив; номер_строки; [номер_столбца]).
Говоря по-простому, Excel идет в массив данных и возвращает значение, находящееся на пересечении указанной строки и столбца. Как будто бы просто. Таким образом, формула =ИНДЕКС($A$2:$C$6;4;2) вернет значение, находящееся в ячейке B5.
Применительно к нашей проблеме, чтобы вернуть табельный номер работника, формула должна выглядеть следующим образом =ИНДЕКС($A$2:$A$6;?;1). Выглядит как бессмыслица, но если мы заменим знак вопроса формулой ПОИСКПОЗ, у нас есть решение.
Функция ПОИСКПОЗ()
Синтаксис этой функции таков: =ПОИСКПОЗ(искомое_значение; просматриваемы_массив; [тип_сопоставления]).
Она говорит Excel: «Найди искомое_значение в массиве данных и верни номер строки массива, в которой это значение встречается». Таким образом, чтобы найти в какой строке находиться имя сотрудника в ячейке A10, необходимо прописать формулу =ПОИСКПОЗ(A10; $B$2:$B$6; 0). Если в ячейке A10 будет имя «Колин Фарел», тогда ПОИСКПОЗ вернет 5-ю строку массива B2:B6.
Ну, в принципе, все. Функция ПОИСКПОЗ указывает функции ИНДЕКС, в какой строке искать значение. Замените знак вопроса в формуле ИНДЕКС формулой ПОИСКОПОЗ и вы получите эквивалент ВПР с возможностью поиска данных, находящихся левее ключевого столбца. Получиться так:
В начале было непривычно, был огромный соблазн вставить еще одну колону и работать, как всегда работал. Но со временем использование функции ИНДЕКС вошло в привычку. Оказалось, что это быстрее и требует меньших манипуляций. Так что в следующий раз, когда у вас возникнет желание задать номеру столбца отрицательное число в ВПР, воспользуйтесь сочетанием двух странных функций ИНДЕКС и ПОИСКПОЗ, чтобы решить свою проблему.
Источник: exceltip.ru
Поиск значений с помощью функций ВПР, ИНДЕКС и ПОИСКПОЗ
Совет: Попробуйте использовать новые функции кслукуп и ксматч с улучшенными версиями функций, описанными в этой статье. Эти новые функции работают в любом направлении и возвращают точное совпадение по умолчанию, упрощая и удобнее в использовании, чем их предшественники.
Предположим, что у вас есть список номеров местоположений Office, и вам необходимо знать, какие сотрудники находятся в каждом офисе. Электронная таблица огромна, поэтому вы, возможно, считаете, что она является сложной задачей. Это очень просто сделать с помощью функции Просмотр.
Функции ВПР и ГПР вместе с функцией индекс и ПОИСКПОЗявляются наиболее полезными функциями в Excel.
Примечание: Функция “Мастер подстановок” больше не доступна в Excel.
Ниже приведен пример использования функции ВПР.
В этом примере ячейка B2 является первым аргументом— элементом данных, для работы которого требуется функция. Для функции ВПР первым аргументом является значение, которое нужно найти. Этот аргумент может быть ссылкой на ячейку или фиксированным значением, таким как “Иванов” или 21 000. Второй аргумент — это диапазон ячеек (C2-: E7, в котором нужно найти искомое значение. Третьим аргументом является столбец в диапазоне ячеек, который содержит искомое значение.
Четвертый аргумент необязателен. Введите значение истина или ложь. Если ввести ИСТИНА или оставить аргумент пустым, функция возвращает приблизительное совпадение значения, указанного в качестве первого аргумента. Если ввести значение ложь, функция будет соответствовать значению, представленному первым аргументом. Другими словами, если оставить четвертый аргумент пустым — или ввести значение истина, вы получаете более гибкие возможности.
В этом примере показано, как работает функция. Когда вы вводите значение в ячейке B2 (первый аргумент), функция ВПР ищет ячейки в диапазоне C2: E7 (второй аргумент) и возвращает ближайшее приближенное соответствие из третьего столбца в диапазоне, столбец E (Третий аргумент).
Четвертый аргумент пуст, поэтому функция возвращает приближенное соответствие. Иначе потребуется ввести одно из значений в столбец C или D, чтобы получить какой-либо результат.
Если вы хорошо знакомы с функцией ВПР, функция ГПР очень проста в использовании. При вводе одних и тех же аргументов выполняется поиск в строках, а не в столбцах.
Использование функций индекс и MATCH вместо функции ВПР
Существуют определенные ограничения с использованием функции ВПР — функция ВПР может искать значение слева направо. Это означает, что столбец с искомым значением всегда должен располагаться слева от столбца, содержащего возвращаемое значение. Если электронная таблица не создана таким образом, не используйте функцию ВПР. Вместо этого используйте сочетание функций индекс и ПОИСКПОЗ.
В данном примере представлен небольшой список, в котором искомое значение (Воронеж) не находится в крайнем левом столбце. Поэтому мы не можем использовать функцию ВПР. Для поиска значения “Воронеж” в диапазоне B1:B11 будет использоваться функция ПОИСКПОЗ. Оно найдено в строке 4. Затем функция ИНДЕКС использует это значение в качестве аргумента поиска и находит численность населения Воронежа в четвертом столбце (столбец D). Использованная формула показана в ячейке A14.
Дополнительные примеры использования функции индекс и MATCH вместо функции ВПР можно найти в статье https://www.MrExcel.com/Excel-Tips/Excel-VLOOKUP-index-Match/ by Bill Джилена, Microsoft MVP.
Попробуйте попрактиковаться
Если вы хотите поэкспериментировать с функциями поиска перед их использованием с собственными данными, воспользуйтесь приведенными ниже примерами данных.
Пример функции ВПР на работе
Скопируйте указанные ниже данные в пустой лист.
Совет: Перед вставкой данных в Excel задайте ширину столбцов для столбцов A — 250 пикселей и нажмите кнопку Перенос текста (вкладка Главная , группа Выравнивание ).
Источник: support.office.com
Формулы с функциями ВПР и ПОИСКПОЗ для выборки данных в Excel
Не всегда таблицы, созданные в Excel охарактеризованы тем, что названия категорий данных должны быть определены только в заголовках столбцов. Иногда при анализе данных таблицы мы имеем возможность пользоваться как заголовками столбцов, так и названиями строк, которые находятся в первом столбце.
Пример формулы с ВПР и ПОИСКПОЗ
Пример таблицы табель премии изображен ниже на рисунке:
Назначением данной таблицы является поиск соответственных значений премии в диапазоне B5:K11 на основе определенной сумы выручки и магазинов с пределами минимальных или максимальных размеров выплаты премии. Сложность возникает при автоматическом определении размера премии, на которую может рассчитывать сотрудник при преодолении определенной границы выручки. Так как нет четко определенной одной суммы выплаты премии для каждого вероятного размера выручки. Есть только пределы нижних и верхних границ сумм премий для каждого магазина.
Например, нам нужно чтобы программа автоматически определила какая возможная минимальная премия для продавца из 3-тего магазина, выручка которого преодолела уровень в 370 000.
- В ячейку B14 введите размер выручки: 370 000.
- В ячейке B15 укажите номер магазина: 3.
- В ячейке B16 введите следующую формулу:
В результате определена нижняя граница премии для магазина №3 при выручке больше >370 000, но меньше
Легко заметить, что эта формула отличается от предыдущей только номером столбца указанном в третьем аргументе функции ВПР. А, следовательно, нам достаточно лишь к значению, полученному через функцию ПОИСКПОЗ добавить +1, так как сумма максимально возможной премии находиться в следующем столбце после минимальной суммы соответствующий критериям поискового запроса.
Полезные советы для формул с функциями ВПР, ИНДЕКС и ПОИСКПОЗ:
Чтобы пошагово проанализировать формулу Excel любой сложности, рационально воспользоваться встроенными инструментами в разделе: «ФОРМУЛЫ»-«Зависимости формул». Например, особенно полезный инструмент для пошагового анализа вычислительного цикла – это «Вычислить формулу».
Функция ВПР ищет значения в диапазоне слева на право. То есть анализирует ячейки только в столбцах, расположенных с правой стороны относительно от первого столбца исходного диапазона, указанного в первом аргументе функции. Если структура расположения данных в таблице не позволяет функции ВПР по этой причине охватить для просмотра все столбцы, тогда лучше воспользоваться формулой из комбинации функций ИНДЕКС и ПОИСКПОЗ.
Источник: exceltable.com
data_client
Excel и Python. Аналог ВПР в Pandas.
ВПР является одной из самых используемых формул в Excel, так как позволяет объединять данные из двух таблиц по условию. В Python, а именно в пакете Pandas, мы можем делать тоже самое, но только быстрее и с большим вариантом применения.
Итак, для начала создадим Excel файл с примером, который будем использовать в этом уроке. В нем будет два листа. Первый лист назовем “Данные” и его содержание будет следующим:
Второй лист называем “Источник” и он будет содержать такую простую таблицу:
Сохраняем файл с названием “Excel_Python-2.xlsx“. Теперь наша задача к первой таблице добавить доход наших сотрудников, основываясь на их фамилиях.
Запускаем Spyder, вставляем в новый скрипт код, представленный ниже, сохраняем в туже папку, что и Excel файл и запускаем. Если сделали все правильно, то у вас в листе “Данные” Excel файла должен появиться столбец “Доход” с соответствующими данными:
import xlwings as xw
import pandas as pd
wb=xw.Book(‘Excel_Python-2.xlsx’) # Открываем книгу
data_excel = wb.sheets[‘Данные’] # Читаем лист Данные
source_excel = wb.sheets[‘Источник’] # Читаем лист Источник
data_pd = data_excel.range(‘A1:C4’).options(pd.DataFrame, header = 1, index = False).value # Создаем DataFrame
source_pd = source_excel.range(‘A1:B4’).options(pd.DataFrame, header = 1, index = False).value # Создаем DataFrame
data_pd = pd.merge(data_pd,source_pd,on=[‘Фамилия’], how=’left’) # Аналог ВПР data_excel.range(‘A1’).options(index = False).value = data_pd
Рассмотрим новую строку кода, которой не было раньше в примере, а именно:
data_pd = pd.merge(data_pd,source_pd,on=[‘Фамилия’], how=’left’)
Итак, мы говорим что наш DataFrame data_pd равен результату работы встроенной в Pandas функции Merge. В качестве параметров указываем на первом месте DataFrame, куда должен попасть результат выполнения операции, вторым параметром – откуда брать данные, третий параметр – на основании какого столбца выполнять поиск и четвертый параметр – в какую таблицу вставлять данные.
Если вы не понимаете, одну из других строк кода, прочитайте мой первый урок про Excel и Python. Там я все подробно объяснил. Вот ссылочка.
Итак, мы получили желаемый результат. Однако это самый простой вариант применения ВПР. Давайте усложним наш пример и посмотрим на то, как еще можно использовать функцию Merge. В примере выше мы предполагали что в обеих таблицах есть столбец с названием “Фамилия”, по которому мы производили поиск. А что делать если к примеру в одной таблице он называется к примеру “Фамилия сотрудника”? Давайте рассмотрим такую ситуацию:
Сначала измените в Excel файле в листе “Источник” названия столбца “Фамилия” на “Фамилия сотрудника”, а на листе “Данные” удалите столбец “Доход”, который мы создали при помощи скрипта ранее.
В коде замените строку с командой Merge на следующее:
data_pd = pd.merge(data_pd,source_pd,left_on=[‘Фамилия’], right_on=[‘Фамилия сотрудника’], how=’left’) # ВПР
data_pd.drop([‘Фамилия сотрудника’], axis=’columns’, inplace=True) #Удаляем лишний столбец
Появились два новых параметра: left_on=[‘Фамилия’] – названия столбца, по которому ведется поиск в Dataframe data_pd; right_on=[‘Фамилия сотрудника’] – названия столбца, по которому ведется поиск в Dataframe source_pd.
Также появилась новая функция drop – она удаляет ненужный нам столбец “Фамилия сотрудника”, который был создан в таблице data_pd, как результат работы функции merge.
Запускаем код, проверяем Excel файл, если все сделали верно – то столбец Доход должен снова появиться в листе “Данные”.
Продолжаем усложнять условие. Предположим, что нам надо сделать ВПР не по одному, а по нескольким столбцам одновременно. В Excel для этого в формулу ВПР надо было бы добавлять СЦЕПИТЬ, а в просматриваемой таблице пришлось бы добавить столбец с ключом, который бы также формировался при помощи формулы СЦЕПИТЬ. В Pandas же можно воспользоваться всё той же функцией Merge. Давайте рассмотрим на примере:
Для начала усложним наши Excel таблицы. Лист “Данные” должен содержать следующую информацию:
А лист “Источник” соответственно:
Теперь обновим наш код. Будет он выглядеть следующим образом:
import xlwings as xw
import pandas as pd
wb=xw.Book(‘Excel_Python-2.xlsx’) # Открываем книгу
data_excel = wb.sheets[‘Данные’] # Читаем лист Данные
source_excel = wb.sheets[‘Источник’] # Читаем лист Источник
data_pd = data_excel.range(‘A1:C7’).options(pd.DataFrame, header = 1, index = False).value # Создаем DataFrame
source_pd = source_excel.range(‘A1:C7’).options(pd.DataFrame, header = 1, index = False).value # Создаем DataFrame
data_pd = pd.merge(data_pd, source_pd, left_on=[‘Фамилия’,’Имя’], right_on=[‘Фамилия сотрудника’,’Имя сотрудника’], how=’left’) # ВПР по нескольким столбцам
data_pd.drop([‘Фамилия сотрудника’, ‘Имя сотрудника’], axis=’columns’, inplace=True) #Удаляем лишние столбцы
data_excel.range(‘A1’).options(index = False).value = data_pd
Итак, какие изменения у нас произошли:
1. Указаны новые размеры таблиц (‘A1:C7’) при создании DataFrame.
2. Обновлена функция Merge. Теперь мы указываем в параметрах left_on и right_on те столбцы, по которым ведется поиск соответствий.
3. Обновлена функция Drop. Так как Merge добавит лишние два столбца, то этой функцией мы их удаляем.
На этом урок закончен. Есть вопросы – задавайте в комментариях.
Источник: www.excelguide.ru
Усовершенствуем функцию ВПР в Excel
Прочтение публикации Упрощаем бинарный поиск в Excel сподвигло на дополнительное усовершенствование функции ВПР по сравнению с приведенным в статье.
Что не было учтено, и что хотелось бы добавить:
1. Универсальность, т.е. возможность вызывать функцию как для отсортированного массива, так и для неотсортированного.
2. Исключить необходимость два раза вызывать функцию бинарного поиска (ВПР).
3. Как исходная функция ВПР, так и предложенная в статье имеет следующий недостаток: номер колонки обычно фиксируется при вызове функции. Обычно жизнь не стоит на месте, и в таблицу приходится добавлять колонки в произвольное место. Если аргументы функции указаны в виде ссылок на ячейки, то Excel умеет самостоятельно изменять ссылки таким образом, чтобы ссылка продолжала ссылаться на те же данные, что и раньше. Если же ссылка задана номером колонки, то при добавлении колонок в середину таблицы, такой перенумерации не происходит и приходится осуществлять поиск использованных функций ВПР и менять вызовы вручную. Поэтому целесообразно задавать колонку с ключом и колонку с искомым значением в виде двух отдельных аргументов.
4. Сделать защиту от дурака — проверять передаваемые аргументы на корректность.
В связи с этим целесообразно отделить указание на то, каким образом отсортирован массив (по возрастанию, по убыванию или не отсортирован) от желаемого результата (нужен точный результат или достаточно приближенного). Вот получившийся код с комментариями.
Дополнительные плюшки
1. Возможность поиска в массиве, отсортированном по убыванию (Ordered = -1).
2. Функция позволяет делать поиск если любой (или оба) из аргументов a и b являются горизонтальными рядами (т.е. обобщает и функцию горизонтального просмотра ГПР).
Комментарии
1. Вызов CDbl(“”) нужен для генерации ошибки (выдача #ЗНАЧ#).
2. Используется не ВПР, а функция Match (русский аналог — ПОИСКПОЗ).
Спасибо за внимание!
Редакторский дайджест
Присылаем лучшие статьи раз в месяц
Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.
- Скопировать ссылку
- ВКонтакте
- Telegram
Похожие публикации
- 21 июня 2012 в 09:42
Я не могу написать бинарный поиск
В поисках оптимизации загрузки Vista
Очень быстрый поиск с программой Everything
Вакансии
AdBlock похитил этот баннер, но баннеры не зубы — отрастут
Комментарии 13
для интеграции есть адд-он к Excel: RExcel — http://rcom.univie.ac.at/download.html#RExcel.
А если все делать в R, то есть пакеты и для открытия файлов xls, и сохранения результатов в них же.
но с удовольствием бы перешел на R.
Ээээ, кхм…
Это хорошо, что сделали типа ВПР, но через ПОИСКПОЗ, хотя в первоначальной статье именно про это в коментариях и говорилось.
Однако…
Функции пита ВПР или ПОИСКПОЗ прменяются в 2-х видах задач:
1. Разовая обработка больших массивов данных в экселе. Как оказала практика, если вы через ОЛЕ выгружаете данные эксель, то лучше выгружать сразу в Аксес. Для статитстической обработки очень больших данных это намного практичнее и быстрее.
Более того, если выгружать в эксель и обрабатывать в нем, то нюансы функции ВПР не так важны, как и скорость — работа разовая, можно 1- сек подождать.
2. Рабочие файлы, в которых ежедневно, ежеднелельно и ежемесячно ведется работа, обрабатываемые данные могут заносится туда выгрузками или вручную (т.е. никаких сортировок).
И функции типа ВПР, ПОИСПОЗ или СУММПРОИЗВ применяются в массовых масштабах для создания реляционной базы.
Данные измеряются не 200 тыс строк, а на порядок меньше, зато указанные функции используются по 5-15 раз в каждой строке, итого они вызываются под 1 млн раз.
Это я к чему? При такое количестве вызоов функций любое использование ВБА подвешивает программу на минуты и часы. По этой простой причине примеются исключительно встроенные фукнции, т.к. скрипты катасрофически тормознутые.
Если у вас 100 вызовов ВБА — это нормально, если 100 тыс. — это беда.
Причем тормозит именно сам механизм ВБа, даже если вы там внутри вызываете встроенные функции.
Источник: habr.com
Поиск ДАТЫ (ЧИСЛА) ближайшей к заданной, с условием в EXCEL. Аналог ВПР()
С помощью функции ВПР() можно выполнить поиск в столбце таблицы (называется ключевым столбцом), а затем вернуть значение из той же строки, но другого столбца. Здесь рассмотрим более сложный поиск: искать будем не среди всех значений ключевого столбца, а только среди значений удовлетворяющих дополнительному условию.
Точное совпадение
Сначала вкратце напомним работу ВПР() – VLOOKUP() с аргументом интервальный_просмотр = ЛОЖЬ (когда ищется значение в ключевом столбце точно соответствующее критерию).
Задача: Для заданного пользователем Товара найти в таблице соответствующую цену и количество (см. файл примера ).
Решение очевидно ( =ВПР(B10;B13:C15;2;0) ) и подробно рассмотрено в статье про ВПР() .
Предположим, что исходная таблица усложнилась – добавился столбец с номерами заказов.
Теперь необходимо искать заданный Товар не по всему столбцу Товар, а лишь в строках, относящегося к заданному пользователем Заказу.
Найдем количество и цену для товара Мандарины в Заказе 2.
В ячейках А21 и В21 введем номер Заказа и наименование товара.
В ячейке С21 введем формулу массива :
=ЕСЛИ(МАКС(ЕСЛИ((Таб1[Заказ]=A21)*(Таб1[Товар]=B21);Таб1[Количество];””));МАКС(ЕСЛИ((Таб1[Заказ]=A21)*(Таб1[Товар]=B21);Таб1[Количество];””));”В заказе нет искомого Товара”)
Аналогичную формулу можно использовать для поиска цены.
Ближайшее ЧИСЛО (ДАТА)
В предыдущей задаче предполагалось, что наименование Товара присутствует в Заказе в единственном экземпляре и точно соответствует критерию поиска. Однако, существует класс задач, когда это не так. Особенно часто встречаются задачи поиска ближайшего ЧИСЛА (если точное значение в ключевом столбце не найдено, то выводится ближайшее).
Примечание . Формулы, созданные для поиска ближайших ЧИСЕЛ, работают и для ДАТ, т.к. даты в MS EXCEL хранятся в числовом формате .
Сначала вкратце напомним работу ВПР() – VLOOKUP() с аргументом интервальный_просмотр = ИСТИНА (когда ищется значение в ключевом столбце точно или приблизительно совпадающее с критерием).
Задача: Для указанной пользователем Даты найти соответствующую ей цену (см. файл примера ).
Напомним, что для ВПР() с аргументом интервальный_просмотр = ИСТИНА требуется сортированный по возрастанию ключевой столбец (Дата). При отсутствии в столбце точного совпадения выводится наибольшее значение, которое меньше искомого. При наличии нескольких одинаковых подходящих значений в ключевом столбце, учитывается, то что ниже. Поэтому Цена выведена 220р., а не 240 и не 230.
Теперь необходимо для заданной пользователем Даты найти соответствующую ей цену, но эта Цена и дата должны относится к заданному пользователем Продавцу.
Другими словами, найдем цену на дату, ближайшей к заданной, но только для определенно продавца.
В ячейках А25 и В25 введем Продавца и дату.
Прежде чем писать формулу, определимся, что значит “ближайший”. На самом деле можно дать несколько определений, нужный вариант выбирается исходя из условий решаемой задачи.
Вот несколько возможных определений:
1. В терминах функции ВПР() “ближайший” – это наибольшее значение, которое меньше искомого. При наличии нескольких одинаковых подходящих значений в ключевом столбце, учитывается, то что расположено ниже в таблице. Понятно, что такое значение может быть не обязательно ближайшим.
2. Другой вариант: наименьшее значение, которое больше искомого. При наличии нескольких одинаковых значений в ключевом столбце, учитывается, то что выше.
3. Ближайшее, т.е. та дата, которая ближе, чем все остальные (м.б. раньше или позже заданной). Если таких дат несколько, то учитывается нижняя и выводится соответствующая ей цена.
Еще несколько вариантов предложено в файле примера .
Понятно, что для каждого определения ближайшего требуется своя формулы массива (все их можно найти в файле примера ).
Формулы для определения цены, как правило, используют результат формулы определяющей ближайшую дату.
Источник: excel2.ru