带多个条件的VLOOKUP在一个单元格中返回值

我发现这个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来比较多个匹配条件的返回值。

任何想法如何可以升级?

谢谢。 更新如下:

数据表: 在这里输入图像说明

我需要公式来返回A1-1A和A.0002匹配的单元格中的值。 结果应该是8 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()的数组forms,它使用你想过滤返回值的条件。

所以在你的例子中,你可以使用这个数组forms:

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

" "表示我们需要一个值之间的空格。

TRUE意味着我们跳过任何空白,这是非常重要的,因为我们发送空白值时,没有filter的理由。

IF((A2:A7="A")*(B2:B7=2),C2:C7,"")循环遍历列,并在两个布尔检验都为TRUE时返回值,否则返回空格。

存在和数组公式必须在退出编辑模式而不是Enter时用Ctrl-Shift-Enter确认。 如果正确完成,则Excel将在公式周围放置{}

在这里输入图像说明


如果你想返回完整的列,你可以简单地使用:

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

以常规的forms,它将在一个单元中返回8 3 3 9 2 3


注意

如果您有Office 365 Excel,则TEXTJOIN是一种本地存在的公式,这两种公式都是在上面input的公式。

您只需使用上述的公式,而不是使用vba代码。