Функция, подобная VLOOKUP: выберите регистр для длинного списка в VBA Excel

Вместо нескольких команд If ... Then в Excel VBA вы можете использовать структуру Select Case. Но как эффективно выполнять эту задачу, если это длинный список? Например, посмотрите следующие данные:

 Code ID Girls Names 0001 Sophia 0002 Emma 0003 Olivia 0004 Isabella 0005 Ava 0006 Lily 0007 Zoe 0008 Chloe 0009 Mia 0010 Madison 0011 Emily 0012 Ella 0013 Madelyn 0014 Abigail 0015 Aubrey 0016 Addison 0017 Avery 0018 Layla 0019 Hailey 0020 Amelia 0021 Hannah 0022 Charlotte 0023 Kaitlyn 0024 Harper 0025 Kaylee 0026 Sophie 0027 Mackenzie 0028 Peyton 0029 Riley 0030 Grace 0031 Brooklyn 0032 Sarah 0033 Aaliyah 0034 Anna 0035 Arianna 0036 Ellie 0037 Natalie 0038 Isabelle 0039 Lillian 0040 Evelyn 0041 Elizabeth 0042 Lyla 0043 Lucy 0044 Claire 0045 Makayla 0046 Kylie 0047 Audrey 0048 Maya 0049 Leah 0050 Gabriella 0051 Annabelle 0052 Savannah 0053 Nora 0054 Reagan 0055 Scarlett 0056 Samantha 0057 Alyssa 0058 Allison 0059 Elena 0060 Stella 0061 Alexis 0062 Victoria 0063 Aria 0064 Molly 0065 Maria 0066 Bailey 0067 Sydney 0068 Bella 0069 Mila 0070 Taylor 0071 Kayla 0072 Eva 0073 Jasmine 0074 Gianna 0075 Alexandra 0076 Julia 0077 Eliana 0078 Kennedy 0079 Brianna 0080 Ruby 0081 Lauren 0082 Alice 0083 Violet 0084 Kendall 0085 Morgan 0086 Caroline 0087 Piper 0088 Brooke 0089 Elise 0090 Alexa 0091 Sienna 0092 Reese 0093 Clara 0094 Paige 0095 Kate 0096 Nevaeh 0097 Sadie 0098 Quinn 0099 Isla 0100 Eleanor 

Я поместил список идентификаторов кода в столбец AA и список имен девушек в столбце AB. Я не буду вводить приведенный выше список, используя структуру Select Case, поэтому я использую следующий код для выполнения той же задачи. Он соответствует частичному тексту в столбце A и печатает результат в столбце E:

 Sub Matching_ID() ....................................... Dim ID As String, j As Integer, k As Integer, List As Integer List = Cells(Rows.Count, "AA").End(xlUp).Row ID = Mid(Cells(i, "A"), j, 4) For k = List To 2 Step -1 If ID = Cells(k, "AA").Value Then Cells(j, "E") = Cells(k, "AB").Value Exit For Else Cells(j, "E") = "" End If Next k ....................................... End Sub 

Хотя приведенный выше код работает нормально, но это очень трудоемко. Есть ли способ лучше?

Мне нравится использовать Match при поиске в одном столбце:

 Dim t 'try to find ID t = Application.Match(ID, Range("AA:AA"), 0) 'if not found t will be an error so we test that If Not IsError(t) Then Cells(i, "E") = Cells(t, "AB").Value Else Cells(i, "E") = "" End If 

Вы можете использовать VLOOKUP в VBA:

 Sub Matching_ID() Dim ID As String, j As Long, i As Long, k As Long, List As Range Dim sht As Worksheet, v Set sht = ActiveSheet Set List = sht.Range(sht.Cells(2, "AA"), sht.Cells(Rows.Count, "AB").End(xlUp)) ID = Mid(Cells(i, "A"), j, 4) 'returns match or an error value if no match v = Application.VLookup(ID, List, 2, False) sht.Cells(j, "E") = IIf(IsError(v), "", v) End Sub 
  • Проблемы с VBA VLookup
  • Excel VBA Абсолютная ссылка
  • Vlookup между двумя листами - поиск текста из исходного листа для целевого не получения результата
  • Формула для последовательной нумерации по правилам
  • = VLOOKUP (SUMIFS) Заявление требует длительного времени обработки
  • Обновить определенные значения в большом массиве, где они соответствуют второму массиву (например, vlookup)
  • VBA VLOOKUP Преобразование в значения Дает # N / A
  • Запрос Excel VLOOKUP - сопоставление данных из двух таблиц
  • Excel: Combine = vlookup и = countif
  • Суммируйте результаты vlookups по нескольким столбцам
  • Sub Query Vlookup
  • Давайте будем гением компьютера.