2016-12-05 5 views
0

Я пытаюсь выполнить VLOOKUP, но он может только вернуть 1 значение. Я хочу, чтобы мой результат возвращал несколько адресов электронной почты, а мое значение поиска - это несколько имен в одной ячейке. Первая ячейка - это значение, которое я хочу сопоставить с моей таблицей поиска. result.Excel- Возвращает несколько значений в одной ячейке из нескольких строк

Ниже моя таблица поиска, где каждый адрес электронной почты здесь, но, как я достичь результата, как [email protected]; [email protected], так что я могу просто автоматизировать напоминание по электронной почте в VBA с использованием подстановок писем ранее ? Как я могу это достичь?

enter image description here

Я также получил эту ошибку, когда я отладку, я не могу получить выбранные электронные почты enter image description here

Sub getEmails() 
Dim toNames As Range 
Set toNames = Range("J3:J500") ' names input by user 

Dim names As Range 
Set names = Range("Email!B3:C25") ' names range from lookup table from different worksheet 

Dim splitNames 
splitNames = Split(toNames, ",") 

Dim selectedEmails As String 

For i = 0 To UBound(splitNames) 
    findRange = names.Find(What:=splitNames(i), LookIn:=xlFormulas, _ 
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False) 

    ' if match found, get the email and store to selected emails variable 
    If Not findRange Is Nothing Then 
    selectedEmails = selectedEmails & Range("B" & findRange.Row) & ";" 
    End If 


Next i 

'output emails 
Range("Q3:Q500") = selectedEmails 
End Sub 
+0

Это было именно то, что я не хочу делать. Я не могу предсказать, какое имя персонаж собирается написать в будущем. Поэтому мне нужно иметь формулу для поиска значения – gpsrosak

+0

Я бы порекомендовал вам всего несколько VLookups в цикле в VBA. Итак, если «Pui Kuan, Eric» - это поле ввода, «Разделить» его на отдельные имена, сделайте VLookup на каждом из отдельных имен и соедините результаты. – YowE3K

+0

Можете ли вы показать мне пример, основанный на VBA, который я написал выше? Спасибо – gpsrosak

ответ

0

Итак, вы хотите, чтобы ввести множество имен в ячейке и получить соответствующие сообщения электронной почты из таблицы в другой ячейке. Попробуйте приведенный ниже код. Я предположил, что имена были введены через запятую, и полученные электронные письма разделяются символом «;»

Sub getEmails() 
     Dim toNames As Range 
     Set toNames = Range("D25") ' names input by user 

     Dim names As Range 
     Set names = Range("A25:A39") ' names range from lookup table 

     Dim splitNames 
     splitNames = Split(toNames, ",") 

     Dim selectedEmails As String 
     Dim findRange As Range 

     For i = 0 To UBound(splitNames) 
      ' find the range matching the name 
      findRange = names.Find(What:=splitNames(i), LookIn:=xlFormulas, _ 
       LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False) 

      ' if match found, get the email and store to selected emails variable 
      If Not findRange Is Nothing Then 
       selectedEmails = selectedEmails & Range("B" & findRange.Row) & ";" 
      End If 

     Next i 

     'output emails 
     Range("D26") = selectedEmails 
    End Sub 

Также будет отображаться ошибка времени выполнения, если любое из имен не будет найдено в списке.

+0

Я уже написал это в vba. но моя таблица поиска из другого листа? и я скомпилировал ошибку – gpsrosak

+0

У меня ошибка несоответствия '13. Я не могу запустить – gpsrosak

+0

@ gpsrosak, отлично! Обновите сообщение своим собственным кодом и укажите, где он не работает и почему. – user3598756

Смежные вопросы