具有多个标准的VLOOKUP在一个单元格中返回值

时间:2016-09-16 13:01:19

标签: excel excel-vba vlookup vba

我发现这个VBA能够使用一个匹配的标准将所有匹配的值返回到一个单元格中:

Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)
'Update 20150310
Dim rng As Range
Dim xResult As String
xResult = ""
For Each rng In pWorkRng
    If rng = pValue Then
        xResult = xResult & " " & rng.Offset(0, pIndex - 1)
    End If
Next
MYVLOOKUP = xResult
End Function

但是我需要这个VLOOKUP来返回与多个匹配条件相比的值。

有关如何升级的想法吗?

感谢。 更新如下:

数据表: enter image description here

我需要公式在A1-1A和A.0002匹配的一个单元格中返回值。结果应 8 3

1 个答案:

答案 0 :(得分:3)

这是一种略有不同的方法。

Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
    Dim d As Long
    Dim c As Long
    Dim arr2()
    Dim t As Long, y As Long
    t = -1
    y = -1
    If TypeName(arr) = "Range" Then
        arr2 = arr.Value
    Else
        arr2 = arr
    End If
    On Error Resume Next
    t = UBound(arr2, 2)
    y = UBound(arr2, 1)
    On Error GoTo 0

    If t >= 0 And y >= 0 Then
        For c = LBound(arr2, 1) To UBound(arr2, 1)
            For d = LBound(arr2, 1) To UBound(arr2, 2)
                If arr2(c, d) <> "" Or Not skipblank Then
                    TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
                End If
            Next d
        Next c
    Else
        For c = LBound(arr2) To UBound(arr2)
            If arr2(c) <> "" Or Not skipblank Then
                TEXTJOIN = TEXTJOIN & arr2(c) & delim
            End If
        Next c
    End If
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
End Function

它允许您确定分隔符,就像您可以拥有,或只是一个空格或任何您想要放在返回值之间的内容。

第二个标准询问您是否要为任何空的空间返回空白区域。

第三种方法是放置一个数组形式的IF(),它使用您想要过滤返回值的条件。

因此,在您的实例中,您将以数组形式使用它:

=TEXTJOIN(" ",TRUE,IF((A2:A7="A")*(B2:B7=2),C2:C7,""))

" "表示我们希望值之间有空格。

TRUE表示我们跳过任何空白,这很重要,因为我们在过滤器没有证明值时发送空白。

IF((A2:A7="A")*(B2:B7=2),C2:C7,"")循环遍历列并在两个布尔测试都为TRUE时返回值,如果不是,则返回空白。

当退出编辑模式而不是回车时,必须使用Ctrl-Shift-Enter确认存在和数组公式。如果操作正确,则Excel会将{}放在公式周围。

enter image description here

如果您想要返回完整列,只需使用:

=TEXTJOIN(" ",TRUE,C2:C7)

以常规形式,它会在一个单元格中返回8 3 3 9 2 3

<强>

如果您有Office 365 Excel TEXTJOIN是一个本机存在的公式,在上述两种情况下都会输入。

您只需使用上述公式,而不使用vb​​a代码。