Я ищу формулу Excel, которую можно использовать для автоматического заполнения E2 на скриншоте ниже. Намерение состоит в том, чтобы найти возраст Марка из столбца B, то есть E2 должно быть 20 лет. Есть идеи, пожалуйста? Я попробовал Match, VLookup и ряд других функций без удачи.

3 ответа3

2

Это почти работает:

{=INDEX(B$2:B$3, MATCH(1, (SEARCH(D2, A$2:A$3)>0)*1, 0), 1)}

Таким образом, ищите D2 в каждой ячейке диапазона A, возвращая 1 для каждой ячейки, в которой он найден, точно совпадая с 1, чтобы вернуть успешные строки, затем индексируйте в диапазон B, используя возвращенную строку, и получите возраст из первый столбец в этом диапазоне. Это предполагает, что совпадение вернет только одну строку. Используйте Ctrl-Shift-Enter, чтобы получить {} указывающий режим массива.

Так как искомое имя может быть префиксом другого имени, мы должны искать слово break (пробел или конец строки) len (name) символов после места, где оно было найдено:

{=INDEX(B$2:B$3,
        MATCH(0,
              LEN(SUBSTITUTE(MID(A$2:A$3,LEN(D2)+SEARCH(D2,A$2:A$3),1),
                             " ",
                             "")),
              0),
        1)}

Мы также должны искать разрыв слова в начале :

{=INDEX(B$2:B$3,MATCH(0,
   LEN(SUBSTITUTE(IFERROR(MID(A$2:A$3,SEARCH(D2,A$2:A$3)-1,1)," ")," ",""))+
   LEN(SUBSTITUTE(MID(A$2:A$3,LEN(D2)+SEARCH(D2,A$2:A$3),1),       " ","")),
   0),1)}
1

Так как вы попросили ответить и на VBA. Я настроил образец, как ваш:

Используя следующий макрос, я написал:

Public Sub do_stuff_and_things()

Dim i As Integer
Dim name_to_find As String
Dim age As String

name_to_find = Range("'Sheet1'!D2").Value


age = "not found"

i = 2

Do Until i = Range("'Sheet1'!A1").End(xlDown).Row + 1

 If InStr(Range("'Sheet1'!A" & i).Value, name_to_find) Then
 age = Range("'Sheet1'!B" & i).Value
 Exit Do
 End If

 i = i + 1
Loop


Range("'Sheet1'!E2").Value = age
End Sub

Он просто использует функцию InStr, чтобы увидеть, содержит ли поле значение вашего поиска. Конечно, это требует, чтобы имя было напечатано в точности так, как оно указано в столбце поиска.

Надеюсь это поможет.

Если вам нужна помощь в реализации этого, обязательно дайте мне знать.

1

Вы можете использовать vlookup с подстановочными знаками:

= VLOOKUP("*" & D2 & "*", $ A $ 2:$ B $ 3,2, FALSE)

Где D2 - это ячейка, которую вы хотите найти (которая также может быть жестко закодирована как "Marc"), $ A $ 2:$ B $ 3 - это ваш диапазон, который содержит $ перед каждым столбцом и ссылкой на строку, что сделает диапазон статический, потому что вы, вероятно, не хотите, чтобы ваш диапазон изменился, если вы перетаскиваете эту формулу вниз по столбцу.

2 - это индекс столбца, который вы хотите получить в пределах вашего диапазона, а false означает, что это приближение, которое при использовании в сочетании с вашим подстановочным знаком * будет искать любое значение с Marc в нем. xyzMarc123 вернет значение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .