【问题标题】:Excel- Return multiple value in one cell from multiple rowsExcel-从多行返回一个单元格中的多个值
【发布时间】:2016-12-05 02:35:17
【问题描述】:

我尝试 VLOOKUP 但它只能返回 1 个值。我希望我的结果返回多封电子邮件,我的查找值是一个单元格中的多个名称。第一个单元格是我想与我的查找表匹配的值。

下面是我的查找表,每个人的电子邮件都在这里,但是我如何获得像 aa@g.vom;bb@g.com 这样的结果,所以我可以在 VBA 中使用更早的查找电子邮件自动发送提醒电子邮件?我怎样才能做到这一点?

我在调试时也遇到了这个错误,我无法获取选定的电子邮件

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

【问题讨论】:

  • 这正是我不想做的。我无法预测工作人员将来会写什么名字。所以我需要一个公式来查找值
  • 我建议您在 VBA 的循环中执行多个 VLookup。因此,如果 Pui Kuan, Eric 是输入字段,Split 将其转换为单独的名称,对每个单独的名称执行 VLookups,然后连接结果。
  • 你能告诉我上面编写的基于 VBA 的示例吗?谢谢

标签: vba excel vlookup


【解决方案1】:

因此,您想在一个单元格中输入一组姓名,并从另一个单元格的表格中获取相应的电子邮件。试试下面的代码。我假设输入的名称用逗号分隔,生成的电子邮件用“;”分隔

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

如果在列表中找不到任何名称,这也会显示运行时错误。

【讨论】:

  • 我已经用vba写过这个。但我的查找表来自另一张纸?我编译错误
  • @gpsrosak,很好!使用您自己的代码更新您的帖子,并说明失败的地方和原因。
  • @user3598756 同意。 OP - 你应该展示你的解决方案。我们可以尝试提供帮助。将查找表更改为另一张表并不是什么大问题。谷歌这个。
  • 但是,此解决方案可以满足您的需求。您可能必须进行更改以使其更健壮:)
  • 试试Set names = Sheet("Email").Range("B3:C25")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多