Зміст
У посібнику пояснюється, як зробити Excel VLOOKUP чутливим до регістру, демонструється кілька інших формул, які розрізняють регістр тексту, а також вказуються сильні та слабкі сторони кожної функції.
Мабуть, кожен користувач Excel знає, яку функцію виконує вертикальний пошук в Excel. Правильно, це пошук по регістру. Але мало хто знає, що пошук по регістру в Excel не чутливий до регістру, тобто він розглядає малі та великі літери як одні й ті ж символи.
Ось короткий приклад, який демонструє нездатність VLOOKUP розрізняти регістр тексту. Припустимо, що у вас є "bill" в комірці A2 і "Bill" в комірці A4. Наведена нижче формула перехопить "bill", оскільки воно стоїть першим в масиві пошуку, і поверне відповідне значення з B2.
=VLOOKUP("Bill", A2:B4, 2, FALSE)
Далі в цій статті я покажу вам спосіб зробити VLOOKUP чутливим до регістру. Ми також розглянемо кілька інших функцій, які можуть виконувати відповідність з урахуванням регістру в Excel.
Формула VLOOKUP з урахуванням регістру
Як зазначалося вище, звичайна формула VLOOKUP не розпізнає регістр букв. Однак існує спосіб зробити формулу VLOOKUP в Excel чутливою до регістру, як показано в наведеному нижче прикладі.
Припустимо, у вас є Ідентифікатори позицій в колонці А і хочемо витягнути ціну товару та коментар з колонок В і С. Проблема в тому, що ідентифікатори включають в себе як малі, так і великі літери. Наприклад, значення в А4 (001Tvci3u) і А5 (001Tvci3U) відрізняються тільки останнім символом, "u" і "U", відповідно.
При пошуку "001Tvci3 U ", стандартна формула VLOOKUP виводить $90, що асоціюється з "001Tvci3 u ", оскільки він стоїть перед "001Tvci3 U " у масиві пошуку. Але ж це не те, чого ви хочете, чи не так?
=VLOOKUP(F2, A2:C7, 2, FALSE)
Для виконання пошуку з урахуванням регістру в Excel комбінуємо функції ПОИСК, ВЫБОР і ТОЧНО:
VLOOKUP(TRUE, CHOOSE({1,2}, EXACT( lookup_value , lookup_array ), return_array ), 2, 0)Ця загальна формула відмінно працює в будь-яких ситуаціях. Ви навіть можете шукати справа наліво чого не може зробити звичайна формула VLOOKUP. Похвала Pouriya за пропозицію такого простого та елегантного рішення!
У нашому випадку реальні формули виглядають наступним чином.
Потягнути ціну в F3:
=VLOOKUP(TRUE, CHOOSE({1,2}, EXACT(F2, A2:A7), B2:B7), 2, FALSE)
Для отримання коментаря F4:
=VLOOKUP(TRUE, CHOOSE({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 і повертає ІСТИНА, якщо вони абсолютно однакові, включаючи регістр літер, і ЛОЖЬ в іншому випадку:
{FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE}
Для номер_індексу В якості аргументу CHOOSE використовується константа масиву {1,2}. В результаті функція об'єднує логічні значення з наведеного вище масиву та значення з комірок C2:C7 у двовимірний масив ось такого вигляду:
{FALSE,155;FALSE,186;FALSE,90;TRUE,54;FALSE,159;FALSE,28}
Функція VLOOKUP бере його звідти і шукає шукане значення (яке є TRUE) в 1-му стовпчику 2-вимірного масиву (представленого логічними значеннями) і повертає збіг з 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 для lookup_array аргумент:
XLOOKUP(TRUE, EXACT( lookup_value , lookup_array ), return_array "Не знайдено")Останній аргумент ("Не знайдено") є необов'язковим, він лише визначає, яке значення повертати, якщо збігів не знайдено. Якщо його опустити, то у випадку, якщо формула нічого не знайде, буде повернута стандартна помилка #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 і повертає збіг з return_array Зверніть увагу, якщо в стовпці пошуку є два або більше абсолютно однакових значень (включаючи регістр літер), формула поверне перший знайдений збіг.
Обмеження XLOOKUP доступні лише в Excel 365 та Excel 2021.
SUMPROUCT - пошук з урахуванням регістру для повернення відповідних чисел
Як ви зрозуміли із заголовка, SUMPRODUCT - це ще одна функція Excel, яка може виконувати пошук з урахуванням регістру, але вона може повертати числові значення Якщо це не ваш випадок, перейдіть до прикладу INDEX MATCH, який надає рішення для всіх типів даних.
Як ви, напевно, знаєте, функція СУММЕСЛИ в Excel перемножує компоненти у вказаних масивах і повертає суму добутків. Оскільки нам потрібен пошук з урахуванням регістру, ми використовуємо функцію ТОЧНО для отримання першого масиву:
=SUMPRODUCT((EXACT(A2:A7,F2) * (B2:B7)))
На жаль, функція СУММЕСЛИ не може повертати текстові збіги, оскільки текстові значення не можна перемножувати. У цьому випадку ви отримаєте помилку #ЗНАЧЕННЯ! як у комірці F4 на скріншоті нижче:
Як працює ця формула:
Як і в прикладі VLOOKUP, функція EXACT перевіряє значення в F2 на відповідність всім значенням в A2:A7 і повертає TRUE, якщо збіги чутливі до регістру, і FALSE в іншому випадку:
SUMPRODUCT(({FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE}*{155;186;90;54;159;28}))
У більшості формул Excel оцінює ІСТИНА в 1, а ЛОЖЬ в 0. Так, коли СУММЕСЛИ перемножує елементи двох масивів в однакових позиціях, всі неспівпадіння (ЛОЖЬ) стають нулями:
SUMPRODUCT({0;0;0;54;0;0})
В результаті формула повертає число зі стовпчика B, яке відповідає точному збігу з урахуванням регістру в стовпчику A.
Обмеження по сумарному продукту : може повертати тільки числові значення.
INDEX MATCH - пошук з урахуванням регістру для всіх типів даних
Нарешті, ми близькі до того, щоб отримати формулу пошуку без обмежень, чутливу до регістру, яка працює у всіх версіях Excel і на всіх наборах даних.
Цей приклад стоїть останнім не тільки тому, що найкраще зберігається наостанок, але й тому, що знання, які ви отримали в попередніх прикладах, можуть допомогти вам краще зрозуміти формулу MATCH INDEX, що враховує регістр.
Комбінація функцій INDEX і MATCH часто використовується в Excel як більш гнучка і універсальна альтернатива VLOOKUP. Наступна стаття добре (сподіваємося :) пояснює, як ці дві функції працюють разом - Використання INDEX MATCH замість VLOOKUP.
Тут я просто нагадаю ключові моменти:
- Функція MATCH здійснює пошук шуканого значення у вказаному масиві пошуку і повертає його відносне положення.
- Відносна позиція шуканого значення переходить безпосередньо до row_num аргумент функції INDEX з вказівкою повернути значення з цього рядка.
Для того, щоб формула розпізнавала регістр тексту, потрібно лише додати до класичної комбінації INDEX MATCH ще одну функцію. Очевидно, що знову потрібна функція EXACT:
INDEX( return_array , MATCH(TRUE, EXACT( lookup_value , lookup_array ), 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 для lookup_value 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)), "")
У наведеній вище формулі:
- "С" - колонка повернення.
- "1" - це число, яке перетворює взаємне розташування комірки, що повертається функцією MATCH, в комірку реальна адреса комірки .
Наприклад, масив пошуку в нашій функції СРАВНИТЬ має вигляд А2:А7, тобто відносна позиція комірки А2 дорівнює "1", тому що це перша комірка в масиві. Але насправді масив пошуку починається з рядка 2. Щоб компенсувати різницю, ми додаємо 1, тому функція НЕПРЯМА поверне значення з правої комірки.
Наведені нижче скріншоти демонструють покращену формулу 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 мають спеціальний інструмент, який робить пошук у великих і складних таблицях простішим і легшим. Найкраще те, що функція "Об'єднати дві таблиці" має опцію, чутливу до регістру, і наведений нижче приклад демонструє її в дії.
Припустимо, що ви хочете витягнути Qty. з масиву Пошук таблиці до Головна таблицю на основі унікальних ідентифікаторів елементів:
Вам потрібно запустити майстер злиття таблиць і виконати такі дії:
- Виберіть основну таблицю, в яку будуть підтягуватися нові дані.
- Виберіть таблицю пошуку, в якій потрібно шукати нові дані.
- Виберіть один або кілька ключових стовпців (в нашому випадку це ID товару). І обов'язково поставте галочку напроти Підбір з урахуванням регістру Ящик.
Через мить ви отримаєте бажаний результат :)
Ось так виглядає пошук в Excel з урахуванням регістру тексту. Дякую за прочитання і сподіваюся побачити вас на нашому блозі наступного тижня!
Практичний посібник для завантаження
Приклади VLOOKUP з урахуванням регістру (файл .xlsx)