如何从一列中查找每个值并返回带有分隔符的电子邮件地址 [英] How to look up each value from one column and return email addresses with ";" separator

查看:13
本文介绍了如何从一列中查找每个值并返回带有分隔符的电子邮件地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此问题已解决using a formula
遗憾的是,我需要一个可以在Excel 2016中运行的解决方案,而VBA似乎是最佳/唯一的解决方案。

图例:(跨同一工作簿中的多个工作表)
每列都有一个标题。
表3 A栏:姓名列表
表3 H栏:电子邮件地址列表
Sheet1的M列:包含向下拖动的以下公式,该公式生成可变行数的数据: =IFERROR(INDEX($A$2:$A$42,MATCH(0,IF("1"=$L$2:$L$42,COUNTIF($O$1:$O1,$A$2:$A$42),""),0)),"")

在Sheet1的M列中,我有一个Index/Match公式,它用人名列表填充。(如上所述,出现的名称数量是不断变化的。)

我想对照Sheet3的A栏查找Sheet1的M栏中出现的每个姓名,然后从Sheet3的H栏返回各自的电子邮件地址。

此外,我想用分号分隔每个电子邮件地址,因为这是为了填充Outlook电子邮件的收件人字段。

数据外观快照

| A, Sheet3       | H, Sheet3                | M, Sheet1     |
| --------------- | ------------------------ | ------------- |
| John Smith      | JohnSmith@email.com      | Frank Sinatra |
| Kimberly Jones  | Kimberly@email.com       | Corey Smith   |
| Joe Montana     | JoeMontana@email.com     | Kimberly Jones|
| Dean Martin     | DeanMartin@email.com     | John Smith    |
| Corey Smith     | Corey.Smith@email.com    |               |
| Frank Sinatra   | Frank.Sinatra@email.com  |               |

在Sheet1的单元格F2中,宏将生成以下内容:

Frank.Sinatra@email.com; Corey.Smith@email.com; Kimberly@email.com; JohnSmith@email.com      

工作表选项卡名称:

工作表1:

工作表3:

推荐答案

尝试,

Function JoinEmail() As String
    Dim Ws(1 To 2) As Worksheet
    Dim vDB As Variant, vR() As Variant
    Dim vName As Variant
    Dim Dic As Object  'Dictionary
    Dim i As Long, n As Integer
    Dim s As String
    
    Set Ws(1) = Sheets(1)
    Set Ws(2) = Sheets(3)
    
    Set Dic = CreateObject("Scripting.Dictionary")
    
    vDB = Ws(2).UsedRange 'Sheets(3) data
    With Ws(1)
        vName = .Range("M2", .Range("M" & Rows.Count).End(xlUp))
    End With
    
    For i = 2 To UBound(vDB, 1)
        Dic.Add vDB(i, 1), vDB(i, 8) 'name, email
    Next i
    
    For i = 1 To UBound(vName, 1)
        s = vName(i, 1)
        If Dic.Exists(s) Then
            n = n + 1
            ReDim Preserve vR(1 To n)
            vR(n) = Dic(s)
        End If
    Next i
    If n Then
        JoinEmail = Join(vR, "; ")
    Else
        JoinEmail = ""
    End If
    
End Function

图纸1图像

Sheet3图像

这篇关于如何从一列中查找每个值并返回带有分隔符的电子邮件地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆