Делаем ВПР чувствительным к регистру (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)
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (12222) применим к Microsoft Excel 2007, 2010, 2013 и 2016.
Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Making_VLOOKUP_Case_Sensitive [Делаем ВПР с учетом регистра]
.