如何使用“包含类型”匹配来 vlookup 返回多个值,其中搜索字符串可以出现在查找值中的任何位置

如何使用“包含类型”匹配来 vlookup 返回多个值,其中搜索字符串可以出现在查找值中的任何位置

这个答案的一部分已经由https://stackexchange.com/users/4784285/engineer-toast关于 2013 年 1 月 14 日 21:43 提出的问题https://superuser.com/users/22950/overflewExcel - 如何使用 vlookup 返回多个值?

使用 engineer-toast 提供的 VBA 代码,我能够查找值并获取同一单元格内以逗号分隔的所有链接问题。例子 这意味着搜索蓝色时,我会在一个单元格中得到结果“Adam,John,Mark,Paul”,因为这些行与蓝色匹配。这意味着 VBA 函数正在寻找我的搜索键“蓝色”和匹配单元格之间的完美匹配。但我需要能够在单元格内搜索。我需要匹配包含我的键的单元格,而不是搜索精确匹配。选择上面的示例,我的键将是“蓝色”,以匹配包含蓝色的单元格,例如“绿色、蓝色、红色”,并给出结果“Adam、John、Mark、Paul”。参见示例图。示例 2

我对 VBA 代码还不熟悉,所以说实话我还不知道如何更改 engineer-toast 用户提供的代码以匹配包含我的密钥的单元格,而不仅仅是匹配相等的单元格。

工程师吐司代码:

Option Explicit
Function LookupCSVResults(lookupValue As Variant, lookupRange As Range, resultsRange As Range) As String

Dim s As String 'Results placeholder
Dim sTmp As String  'Cell value placeholder
Dim r As Long   'Row
Dim c As Long   'Column
Const strDelimiter = "|||"  'Makes InStr more robust

s = strDelimiter
For r = 1 To lookupRange.Rows.Count
    For c = 1 To lookupRange.Columns.Count
        If lookupRange.Cells(r, c).Value = lookupValue Then
            'I know it's weird to use offset but it works even if the two ranges
            'are of different sizes and it's the same way that SUMIF works
            sTmp = resultsRange.Offset(r - 1, c - 1).Cells(1, 1).Value
            If InStr(1, s, strDelimiter & sTmp & strDelimiter) = 0 Then
                s = s & sTmp & strDelimiter
            End If
        End If
    Next
Next

'Now make it look like CSV
s = Replace(s, strDelimiter, ",")
If Left(s, 1) = "," Then s = Mid(s, 2)
If Right(s, 1) = "," Then s = Left(s, Len(s) - 1)

LookupCSVResults = s 'Return the function

End Function

答案1

如果你想让它这么说lookupRange.Cells(r, c).Value 包含 lookupValue然后替换:

If lookupRange.Cells(r, c).Value = lookupValue Then

和:

If Instr(lookupRange.Cells(r, c).Value, lookupValue) > 0 Then

如果您希望它反过来,只需切换Instr()参数的位置。

相关内容