Робин спросил, есть ли способ сделать ВПР с учетом регистра.

В ее поисковой таблице / диапазоне есть записи, которые похожи (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 [Делаем ВПР с учетом регистра].