2016-12-05 5 views
0

VLOOKUPを試してみますが、1つの値しか返せません。私は私の結果が複数の電子メールを返すようにしたい、そして私の参照値は1つのセルの複数の名前である。最初のセルは、ルックアップテーブルと一致させたい値です。以下は result.Excel-複数の行から1つのセルに複数の値を返します

誰もメールがここにある場合、私のルックアップテーブルであるが、私は[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

私はVBAのループ内で複数のVLookupsを行うことをお勧めします。したがって、 'Pui Kuan、Eric'が入力フィールドであれば、それを個々の名前に分割し、個々の名前ごとにVLookupsを実行し、結果を連結します。 – 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、Fine!投稿を自分のコードで更新し、失敗した理由とその理由を述べます。 – user3598756

関連する問題