VLOOKUP 具有多个标准,在一个单元格中返回值
Posted
技术标签:
【中文标题】VLOOKUP 具有多个标准,在一个单元格中返回值【英文标题】:VLOOKUP with multiple criteria returning values in one cell 【发布时间】:2017-01-24 17:22:52 【问题描述】:我发现这个 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
【问题讨论】:
你能给我们一些例子吗 // 你的数据是什么样的? 【参考方案1】:这是一种略有不同的方法。
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确认,而不是Enter。如果操作正确,Excel 会在公式周围加上。
如果您想返回完整的列,您可以简单地使用:
=TEXTJOIN(" ",TRUE,C2:C7)
以常规形式,它会在一个单元格中返回8 3 3 9 2 3
。
注意
如果您有 Office 365,则 Excel TEXTJOIN
是一个本机存在的公式,在这两种情况下都像上面一样输入。
Office 365 也有过滤器,我们可以使用:
=TEXTJOIN(" ",TRUE,FILTER(C2:C7,(A2:A7="A")*(B2:B7=2),""))
【讨论】:
如果列按顺序混合会有影响吗?按照目前的顺序 A B C 如果是 C A B 呢? @Martin 一点也不只是更改要匹配的范围。并确保使用 Ctrl-Shift-Enter 将其作为数组输入,而不是 enter。 哪个选项的计算时间更长?对自身使用 VBA 或公式?你会建议哪一个,因为我期待使用大约 15k-20k 行。 如果您有 Office 365 excel,则仅使用公式。如果你不这样做,那么我会像上面显示的那样使用。不要使用完整的列引用,而是限制对实际数据集的引用。以上是关于VLOOKUP 具有多个标准,在一个单元格中返回值的主要内容,如果未能解决你的问题,请参考以下文章