VLOOKUP 在单元格中搜索多个值

VLOOKUP 在单元格中搜索多个值

我有一个VLOOKUP用于查找Account #并返回的字段Rep。该Account #字段包含历史数据(每个帐户,包括不活跃帐户)。我如何设置一个VLOOKUP来查看通过检查每个来提取代表名称Account #

Account #       | Email            | Rep Name |   Match Name
12345           | [email protected]  | Rep Name | Rep Name Match
4564566, 45678  | [email protected]  | Rep Name |      #N/A

答案1

没有账户的最大数量。查找会将代表姓名与“活跃”账户列表(通常在单独的选项卡中)进行核对。有些账户有 5 个以上的账户号。导出中没有硬编码的最大值。

答案2

虽然有多种方法可以使用内置 Excel 功能或公式来完成此操作,但没有一种特别有吸引力。

基本思路是将实际包含多个帐户的“帐户编号”项拆分到不同的单元格中,对每个包含的帐户进行单独的代表名称查找,然后挑选出成功的查找(如果有)。可以使用“数据”选项卡中的“文本到列”命令或一组字符串解析公式来完成拆分。可以使用嵌套IF(ISERROR(...))函数或更奇特的数组公式来“挑选”成功的查找。

在此,VBA 解决方案是一个合理的选择。

以下用户定义函数将包含一个或多个帐户的字符串(或对字符串的单元格引用)和对查找范围的引用作为其参数;如果字符串中存在帐户匹配项,则返回代表名称。可选的第三个参数可用于指定帐户字符串中帐户之间的分隔符。如果未指定,则该函数使用逗号和空格(“”,“)的默认分隔符。

该函数将返回其找到的第一个帐户匹配项的代表名称,忽略帐户字符串中可能找到的其他帐户的任何匹配项。如果未找到帐户匹配项,该函数将返回 #VALUE! 错误。

  Option Explicit

  Function AcctRepLookup(Accts As String, RepLookUpRange As Range, Optional Separator As Variant) As Variant
     Dim acctArray As Variant
     Dim acct As Variant
     Dim lookupArray As Variant
     Dim i As Long
     If IsEmpty(Separator) Then
        Separator = ", "
     End If
     acctArray = Split(Accts, Separator)                   'put acct list into array
     lookupArray = RepLookUpRange.Value                    'put lookup table into array
     For Each acct In acctArray                            'loop through accounts
        For i = LBound(lookupArray) To UBound(lookupArray) 'loop through lookup table
           If UCase(acct) = UCase(lookupArray(i, 1)) Then
              AcctRepLookup = lookupArray(i, 2)            'a match:) exit with rep name
              Exit Function
           End If
        Next i
     Next acct
     AcctRepLookup = CVErr(xlErrValue)                     'no match:( exit with error
  End Function

要在您正在使用的工作簿中安装该函数,首先在功能区的“开发人员”选项卡上选择“Visual Basic”选项(左侧第一项),然后从菜单栏中选择“插入/模块”将该函数粘贴到出现的代码窗格中。

相关内容