Делаем ВПР чувствительным к регистру (Microsoft Excel)
Робин спросил, есть ли способ сделать ВПР с учетом регистра.
В ее поисковой таблице / диапазоне есть записи, которые похожи (AbC и aBC) с той лишь разницей, что регистр букв. Она не может изменить значения (сделать их все в верхнем или нижнем регистре), поскольку уникальные значения жизненно важны.
Функция ВПР не имеет возможности проверить наличие информации; он нечувствителен к регистру. Однако есть несколько способов обойти этот недостаток. Один из способов — использовать функцию CODE для создания промежуточного столбца, в котором может выполняться поиск с помощью ВПР. Предполагая, что ваши исходные данные находятся в столбце B, вы можете поместить следующую формулу в ячейку A1 и скопировать ее в столбец:
=CODE(LEFT(B1,1))&"."&CODE(MID(B1,2,1))&"."&CODE(RIGHT(B1,1))
Эта формула смотрит на первые три символа того, что находится в ячейке B1, и преобразует эти символы в десятичные коды символов, разделенные точками. Таким образом, если A1 содержит «ABC», то B1 будет содержать «65.66.67».
Предполагая, что значение, которое вы хотите найти, находится в ячейке C1, вы можете использовать следующую формулу в качестве формулы ВПР:
=VLOOKUP(CODE(LEFT(C1,1))&"."&CODE(MID(C1,2,1))&"."& CODE(MID(C1,3,1)), A:B,2,)
Другой подход — использовать функцию ТОЧНО для определения местоположения того, что вы ищете. Этот подход вообще не использует ВПР, вместо этого он полагается на функцию ИНДЕКС. Формула предполагает, что ячейки, которые вы хотите сравнить, находятся в столбце A, а то, что вы хотите вернуть, — это соответствующая ячейка в столбце B.
=IF(MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))=0,NA(), INDEX($B$1:$B$100,MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))))
Эту формулу необходимо ввести как формулу массива (Shift + Ctrl + Enter). Первая часть формулы (первый экземпляр EXACT) сравнивает C1 (то, что вы ищете) с каждым значением в диапазоне A1: A100. Поскольку это формула массива, в этом случае вы получите 100 значений True / False в зависимости от того, есть ли точное совпадение или нет. Если есть совпадение, то первая функция ROW возвращает строку совпадения, а функция INDEX используется для получения значения из столбца B в этой строке.
В некоторых случаях вы можете захотеть создать свою собственную определяемую пользователем функцию, которая будет выполнять поиск за вас. Ниже приводится пример такого макроса:
Function CaseVLook(compare_value, table_array As Range, _ Optional col_index As Integer = 1) Dim c As Range Dim rngColumn1 As Range Application.Volatile Set rngColumn1 = table_array.Columns(1) CaseVLook = "Not Found" 'Loop first column For Each c In rngColumn1.Cells If c.Value = compare_value Then CaseVLook = c.Offset(0, col_index - 1).Value Exit For End If Next c End Function
Чтобы использовать макрос, просто вызовите функцию со значением, которое вы хотите найти (скажем, ячейкой C1), диапазоном, в первом столбце которого следует искать (например, A: B), и, возможно, смещением столбца в этом диапазоне, как здесь:
=CaseVLook(C1,A:B,2)
Несколько дополнительных подходов можно найти в следующей статье базы знаний:
http://support.microsoft.com/kb/214264
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (6833) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:
link: / excelribbon-Making_VLOOKUP_Case_Sensitive [Делаем VLOOKUP чувствительным к регистру]
.