Делаем чувствительный к регистру vlookup - PullRequest
5 голосов
/ 21 сентября 2010

Кто-нибудь знает, как сделать vlookup с учетом регистра в Excel?

Ответы [ 5 ]

4 голосов
/ 30 ноября 2012

Ключевая проблема для полного решения здесь, как замечает Дик Куслейка: избегать остановки поиска, когда нечувствительное к регистру совпадение найдено до чувствительного к регистру.

Запись в блоге Поиск с учетом регистра в Excel утверждает, что имеет решение этой проблемы с помощью функций INDEX и MATCH (оригинальная информация любезно предоставлена ​​постом Peo Sjoblom). В комментариях тоже есть несколько вариантов.

2 голосов
/ 08 ноября 2015

Более новая функция AGGREGATE¹ может выбирать первое, второе, третье и т. Д. Совпадения, переводя несовпадения в состояние ошибки и игнорируя ошибки.Измените этот метод, используя функцию EXACT , чтобы выбрать регистрозависимый поиск.

nam     date            code
bob     19-Oct-2015     001
BOB     02-Nov-2015     002
boB     28-Oct-2015     002
Bob     24-Oct-2015     004
bOB     27-Oct-2015     005
bOb     21-Oct-2015     006

Pick Bob и BOB из смеси с,

=INDEX(B$2:B$7, AGGREGATE(15, 6, ROW($1:$6)/EXACT($A$2:$A$7, $E2), 1))

Заполните и при необходимости заполните.

Case sensitive VLOOKUP


¹ AGGREGATEфункция была введена в Excel 2010. Она недоступна в более ранних версиях.

1 голос
/ 21 сентября 2010

похоже, что особенность vlookup в том, что регистр не имеет значения, поэтому Боб такой же, как Боб. Вы можете использовать code () для преобразования в ASCII и поиска по коду. Это сделает ваш поиск более сложным, а code () возвращает код только для первого элемента в строке.

0 голосов
/ 21 сентября 2010

Если возвращаемое вами значение является числом, а не текстом, и если первый столбец вашей таблицы lookup_table уникален («bob» не появляется более одного раза), то вы можете использовать формулу массива, подобную этой

=SUM(EXACT(A3:A6,"bob")*(B3:B6))

Ввод с помощью Control + Shift + Enter, а не просто ввод. Он суммирует все в B3: B6, где A3: A6 в точности "боб". Поскольку есть только один «боб», он суммирует только одну ячейку. Поскольку он использует SUM, возвращаемые строки не будут работать.

Если 'bob' появляется более одного раза, он будет суммировать все значения, которые вы, вероятно, не хотите.

Обновление

Если искомое значение не является числом, вы можете использовать формулу массива, чтобы найти строку, а затем обернуть вокруг нее функцию INDEX. Предположим, ваши данные A3: B6, и вы хотите извлечь данные из столбца B на основе точного соответствия в столбце A.

=INDEX(A3:B6,SUM(EXACT(A3:A6,"bob")*(ROW(B3:B6)))-2,2)

Войдите с помощью CSE. Часть SUM возвращает строку, в которой находится «bob». Вы должны вычесть 2 из него, потому что данные начинаются в A3 (вычтите на единицу меньше, чем строка, в которой начинаются данные). Функция INDEX использует эту строку и извлекает из столбца B.

0 голосов
/ 21 сентября 2010

Моя первая мысль - использовать функцию EXACT () для проверки результата vlookup:

=IF(EXACT(VLOOKUP(A2,$C$2:$C$4,1,FALSE),A2),VLOOKUP(A2,$C$2:$C$4,1,FALSE),0)

Где A2 = значение, которое вы хотите найти, а C2: C4 - диапазон, содержащийзначения для поиска.

Это вернет результат vlookup и подтвердит, что он соответствует регистру значения, которое вы хотите найти.Он вернет результат vlookup, если они соответствуют регистру, или 0 в противном случае.

EDITED

На самом деле этот ответ не сработает.Если ваш список содержит «Боб» и «Боб», он найдет первый и единственный тест, который.Извините, я не думал об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...