如何从一列中查找每个值并使用“;”返回电子邮件地址分隔器
Posted
技术标签:
【中文标题】如何从一列中查找每个值并使用“;”返回电子邮件地址分隔器【英文标题】:How to look up each value from one column and return email addresses with ";" separator 【发布时间】:2021-02-18 04:52:50 【问题描述】:这已解决using a formula。 不幸的是,我需要一个适用于 Excel 2016 的解决方案,而且似乎 VBA 是最好/唯一的途径。
图例:(这是跨同一工作簿中的多个工作表)
每列都有一个标题。
Sheet3 的 A 列:名称列表
Sheet3 的 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:
【问题讨论】:
您可能正在寻找UDF version of TEXTJOIN。 哦,太棒了。谢谢本。我会看看我是否可以尝试弄清楚这里发生了什么以及如何结合 XLookup...这将是我第一次做这样的事情 【参考方案1】:试试,
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
Sheet1 图片
Sheet3 图片
【讨论】:
非常感谢 Dy 的帮助。我遇到了麻烦。我添加了几行,我将在您的帖子中以粗体字表示。随意删除,因为我不确定它是否正确。 我想我不能加粗我的编辑,因为它显示为代码,所以它只是显示在星号之间。当我运行代码时,没有任何反应,不知道为什么 只需在您的单元格中输入=JoinEmail()
。
嗯。我收到#NAME?
错误。我在哪个单元格或工作表中输入=JoinEmail()
是否重要?另外,感谢您恢复到您的代码
没关系,我更改了模块的名称并消除了 #NAME?
错误。但现在它只会产生一个空单元格,而不是您在屏幕截图中显示的内容...我会尝试玩弄它以上是关于如何从一列中查找每个值并使用“;”返回电子邮件地址分隔器的主要内容,如果未能解决你的问题,请参考以下文章
R:如何使用其他列中的数据在一列中创建多个新值并为每个新值重复行?