Оглавление
В учебнике объясняется, как сделать Excel VLOOKUP чувствительным к регистру, демонстрируется несколько других формул, различающих регистр текста, а также указываются сильные и слабые стороны каждой функции.
Наверное, каждый пользователь Excel знает, какая функция выполняет вертикальный поиск в Excel. Правильно, это VLOOKUP. Однако мало кто знает, что VLOOKUP в Excel не чувствительна к регистру, то есть она рассматривает строчные и заглавные буквы как одинаковые символы.
Вот небольшой пример, демонстрирующий неспособность VLOOKUP различать регистр текста. Предположим, если у вас есть "bill" в ячейке A2 и "Bill" в A4. Приведенная ниже формула поймает "bill", поскольку он стоит первым в массиве поиска, и вернет соответствующее значение из B2.
=VLOOKUP("Bill", A2:B4, 2, FALSE)
Далее в этой статье я покажу вам способ сделать VLOOKUP чувствительным к регистру. Мы также рассмотрим несколько других функций, которые могут выполнять сопоставление с учетом регистра в Excel.
Формула VLOOKUP с учетом регистра
Как упоминалось выше, обычная формула VLOOKUP не распознает регистр букв. Однако существует способ сделать Excel VLOOKUP чувствительным к регистру, как показано в примере ниже.
Предположим, у вас есть Идентификаторы предметов в столбце A и хотят извлечь цену товара и комментарий из столбцов B и C. Проблема в том, что идентификаторы включают как строчные, так и прописные символы. Например, значения в A4 (001Tvci3u) и A5 (001Tvci3U) отличаются только последним символом, "u" и "U", соответственно.
При поиске "001Tvci3 U ", стандартная формула VLOOKUP выводит $90, которые связаны с "001Tvci3 u ", потому что он идет перед "001Tvci3 U " в массиве поиска. Но это не то, что вам нужно, верно?
=VLOOKUP(F2, A2:C7, 2, FALSE)
Чтобы выполнить поиск с учетом регистра в Excel, мы комбинируем функции VLOOKUP, CHOOSE и EXACT:
VLOOKUP(TRUE, SELECT({1,2}, EXACT( поиск_значения , массив поиска ), массив возврата ), 2, 0)Эта общая формула отлично работает во всех ситуациях. Вы даже можете поискать справа налево то, что не может сделать обычная формула VLOOKUP. Спасибо Pouriya за предложение этого простого и элегантного решения!
В нашем случае реальные формулы выглядят следующим образом.
Чтобы узнать цену, нажмите F3:
=VLOOKUP(TRUE, SELECT({1,2}, EXACT(F2, A2:A7), B2:B7), 2, FALSE)
Для получения комментария F4:
=VLOOKUP(TRUE, SELECT({1,2}, EXACT(F2, A2:A7), C2:C7), 2, FALSE)
Примечание. Во всех версиях Excel, кроме Excel 365, эта формула работает только как формула массива, поэтому не забудьте нажать Ctrl + Shift + Enter, чтобы правильно ее завершить. В Excel 365, благодаря поддержке динамических массивов, она также работает как обычная формула.
Как работает эта формула:
Основной частью, которая делает трюк, является формула CHOOSE с вложенным EXACT:
CHOOSE({1,2}, EXACT(F2, A2:A7), C2:C7)
Здесь функция EXACT сравнивает значение в F2 с каждым значением в A2:A7 и возвращает TRUE, если они полностью совпадают, включая регистр букв, и FALSE в противном случае:
{FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE}
Для индексное_число аргумент CHOOSE, мы используем константу массива {1,2}. В результате функция объединяет логические значения из приведенного выше массива и значения из C2:C7 в двумерный массив следующим образом:
{FALSE,155;FALSE,186;FALSE,90;TRUE,54;FALSE,159;FALSE,28}
Функция VLOOKUP берет его оттуда и ищет искомое значение (которое равно TRUE) в 1-м столбце двумерного массива (представленного логическими значениями) и возвращает совпадение из 2-го столбца, которое и является искомой ценой:
VLOOKUP(TRUE, {FALSE,155;FALSE,186;FALSE,90;TRUE,54;FALSE,159;FALSE,28}, 2, 0)
Формула XLOOKUP с учетом регистра
Подписчики Microsoft 365 могут выполнять поиск с учетом регистра в Excel с помощью еще более простой формулы. Как вы уже догадались, я говорю о более мощном преемнике VLOOKUP - функции XLOOKUP.
Поскольку XLOOKUP работает с массивами поиска и возврата отдельно, нам не нужен трюк с двумерным массивом из предыдущего примера. Просто используйте EXACT для массив поиска аргумент:
XLOOKUP(TRUE, EXACT( поиск_значения , массив поиска ), массив возврата , "Не найдено")Последний аргумент ("Не найдено") является необязательным. Он просто определяет, какое значение возвращать, если совпадение не найдено. Если его опустить, то будет возвращена стандартная ошибка #N/A, если формула ничего не нашла.
Для нашей таблицы-образца это формулы XLOOKUP, чувствительные к регистру, которые следует использовать.
Чтобы получить цену в F3:
=XLOOKUP(TRUE, EXACT(F2, A2:A7), B2:B7, "Не найдено")
Для извлечения комментария F4:
=XLOOKUP(TRUE, EXACT(F2, A2:A7), C2:C7, "Не найдено")
Как работает эта формула:
Как и в предыдущем примере, EXACT возвращает массив значений TRUE и FALSE, где TRUE представляет совпадения с учетом регистра. XLOOKUP ищет в вышеуказанном массиве значение TRUE и возвращает совпадение из списка массив возврата Обратите внимание, если в колонке поиска есть два или более абсолютно одинаковых значения (включая регистр букв), формула вернет первое найденное совпадение.
Ограничение XLOOKUP : доступно только в Excel 365 и Excel 2021.
SUMPRODUCT - поиск с учетом регистра для возврата совпадающих чисел
Как вы поняли из заголовка, SUMPRODUCT - это еще одна функция Excel, которая может выполнять поиск с учетом регистра, но она может возвращать числовые значения Только. Если это не ваш случай, то переходите к примеру INDEX MATCH, который предлагает решение для всех типов данных.
Как вы, вероятно, знаете, функция SUMPRODUCT в Excel перемножает компоненты в указанных массивах и возвращает сумму произведений. Поскольку нам нужен поиск с учетом регистра, мы используем функцию EXACT, чтобы получить первый массив:
= СУММАРНЫЙ ПРОДУКТ((EXACT(A2:A7,F2) * (B2:B7))))
К сожалению, функция SUMPRODUCT не может вернуть текстовые совпадения, поскольку текстовые значения не могут быть перемножены. В этом случае вы получите ошибку #VALUE!, как в ячейке F4 на скриншоте ниже:
Как работает эта формула:
Как и в примере VLOOKUP, функция EXACT сверяет значение в F2 со всеми значениями в A2:A7 и возвращает TRUE при совпадении с учетом регистра, FALSE в противном случае:
SUMPRODUCT(({FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE}*{155;186;90;54;159;28}))
В большинстве формул Excel оценивает TRUE в 1, а FALSE - в 0. Поэтому, когда SUMPRODUCT перемножает элементы двух массивов в одинаковых позициях, все несовпадения (FALSE) становятся нулями:
SUMPRODUCT({0;0;0;54;0;0})
В результате формула возвращает число из столбца B, соответствующее точному совпадению с учетом регистра в столбце A.
ограничение SUMPRODUCT : может возвращать только числовые значения.
INDEX MATCH - поиск с учетом регистра для всех типов данных
Наконец, мы близки к получению формулы поиска без ограничений, чувствительной к регистру, которая работает во всех версиях Excel и на всех наборах данных.
Этот пример идет последним не только потому, что лучшее приберегается напоследок, но и потому, что знания, полученные в предыдущих примерах, могут помочь вам лучше понять формулу MATCH INDEX, чувствительную к регистру.
Комбинация функций INDEX и MATCH часто используется в Excel как более гибкая и универсальная альтернатива VLOOKUP. В следующей статье хорошо (надеюсь :)) объясняется, как эти две функции работают вместе - Использование INDEX MATCH вместо VLOOKUP.
Здесь я просто напомню вам основные моменты:
- Функция MATCH ищет искомое значение в указанном массиве поиска и возвращает его относительную позицию.
- Относительная позиция значения поиска передается непосредственно в row_num аргумент функции INDEX, предписывающий ей вернуть значение из этого ряда.
Чтобы формула распознавала регистр текста, нужно просто добавить еще одну функцию к классической комбинации INDEX MATCH. Очевидно, что вам снова нужна функция EXACT:
ИНДЕКС( массив возврата , MATCH(TRUE, EXACT( lookup_value , массив поиска ), 0))Реальная формула в F3 такова:
=INDEX(B2:B7, MATCH(TRUE, EXACT(A2:A7, F2), 0))
В F4 мы используем этот:
=INDEX(C2:C7, MATCH(TRUE, EXACT(A2:A7, F2), 0))
Помните, что эта формула работает только как формула массива во всех версиях, кроме Excel 365, поэтому обязательно введите ее, нажав вместе клавиши Ctrl + Shift + Enter. Если все сделано правильно, формула будет заключена в фигурные скобки, как показано на скриншоте ниже:
Как работает эта формула:
Как и во всех предыдущих примерах, EXACT возвращает TRUE для каждого значения в A2:A7, которое точно совпадает со значением в F2. Поскольку мы используем TRUE для поиск_значения MATCH, он возвращает относительную позицию точного совпадения с учетом регистра, что как раз и нужно INDEX для возврата совпадения из B2:B7.
Расширенная формула поиска с учетом регистра
Вышеупомянутая формула INDEX MATCH выглядит идеально, верно? Но на самом деле это не так. Позвольте мне показать вам почему.
Предположим, что ячейка в возвращаемом столбце, соответствующая значению поиска, пуста. Что вернет формула? Ничего. А теперь посмотрим, что она вернет на самом деле:
=INDEX(C2:C7, MATCH(TRUE, EXACT(A2:A7, F2), 0))
Упс, формула возвращает ноль! Возможно, это не так важно, если вы имеете дело исключительно с текстовыми значениями. Однако если ваш рабочий лист содержит числа, и некоторые из них - настоящие нули, это проблема.
По правде говоря, все остальные формулы поиска, рассмотренные ранее, ведут себя точно так же. Но теперь вам нужна безупречная формула, не так ли?
Чтобы сделать формулу INDEX MATCH, чувствительную к регистру, абсолютно совершенной, вы обернете ее в функцию IF, которая проверяет, является ли возвращаемая ячейка пустой, и в этом случае ничего не возвращает:
=IF(INDIRECT("C"&(1+MATCH(TRUE,EXACT(A2:A7, F2), 0)))"", INDEX(C2:C7, MATCH(TRUE, EXACT(A2:A7, F2), 0)), "")
В приведенной выше формуле:
- "C" - это колонка возврата.
- "1" - это число, которое превращает относительное положение ячейку, возвращенную функцией MATCH, в реальный адрес ячейки .
Например, массив поиска в нашей функции MATCH имеет вид A2:A7, что означает, что относительное положение ячейки A2 равно "1", поскольку это первая ячейка массива. Но в действительности массив поиска начинается со второй строки. Чтобы компенсировать разницу, мы добавляем 1, поэтому функция INDIRECT вернет значение из правой ячейки.
Приведенные ниже скриншоты демонстрируют улучшенную формулу INDEX MATCH, чувствительную к регистру, в действии.
Если возвращаемая ячейка пуста, формула не выводит ничего (пустую строку):
Если возвращаемая ячейка содержит ноль, формула возвращает 0:
Если вы хотите вывести какое-либо сообщение, когда возвращаемая ячейка пуста, замените пустую строку ("") в последнем аргументе IF каким-либо текстом:
=IF(INDIRECT("C"&(1+MATCH(TRUE, EXACT(A2:A7, F2), 0)))", INDEX(C2:C7, MATCH(TRUE, EXACT(A2:A7, F2), 0)), "Возвращать нечего, извините").
Делайте VLOOKUP с учетом регистра простым способом
Пользователи нашего Ultimate Suite для Excel имеют специальный инструмент, который облегчает поиск в больших и сложных таблицах и избавляет от стресса. Лучше всего то, что Merge Two Tables имеет опцию чувствительности к регистру, и приведенный ниже пример показывает это в действии.
Предположим, вы хотите извлечь Qty. из Поиск стол к Главная таблицу на основе уникальных идентификаторов элементов:
Для этого нужно запустить мастер Merge Tables и выполнить следующие шаги:
- Выберите основную таблицу, в которую будут подтягиваться новые данные.
- Выберите таблицу поиска, в которой следует искать новые данные.
- Выберите один или несколько ключевых столбцов (в нашем случае - ID товара). И не забудьте установить флажок Сопоставление с учетом регистра коробка.
Через мгновение вы получите желаемый результат :)
Вот как искать в Excel с учетом регистра текста. Я благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!
Рабочая тетрадь для тренировок для скачивания
Примеры VLOOKUP с учетом регистра (файл.xlsx)