2017-10-18 1441 views
-1

我需要一个数组公式或VBA代码,它可以像查找一样工作,但会返回所有可能的值,而不仅仅是第一个值。VLOOKUP返回所有可能的值(不唯一)

如果查找值对应5个唯一值,我需要代码显示所有5个值。

我们可以假设查找值在A列下行,查找范围是列F:G(列G中有5个唯一值)。

+1

您如何期待这些值被返回? - 在1个单元格内连接,还是作为数组?你到目前为止尝试过哪些代码? – Greedo

+0

作为数组返回。 我已严格尝试索引/匹配的数组公式。 – urdearboy

+0

我已经完成了公式和VBA代码。使用公式,这将是非常困难的,它会带来局限性,您需要使用VBA解决方案。看看它,你会发现一些东西,不幸的是,我不能只是在这里为你写代码,因为这不是一个写我的代码论坛,而是一个问题解答一个 – Ibo

回答

1

给这个用户定义函数一试...

Function CustomVLookup(ByVal Lookup_Val As Range, Table_Array As Range, ColIndex As Integer) As String 
Dim x, dict 
Dim i As Long 
x = Table_Array.Value 
Set dict = CreateObject("Scripting.Dictionary") 
For i = 1 To UBound(x, 1) 
    If x(i, 1) = Lookup_Val.Value Then 
     dict.Item(x(i, ColIndex)) = "" 
    End If 
Next i 
If dict.Count > 0 Then 
    CustomVLookup = Join(dict.keys, ", ") 
Else 
    CustomVLookup = "" 
End If 
End Function 

,然后用它的表像下面的...

=CustomVLookup(A2,F2:G25,2) 

其中A2是包含查找值的单元格,F2:G25是表格阵列,2是列索引,它是2,即在这种情况下的列G。

编辑:上述函数将返回属于查找值的所有唯一值。如果你想返回所有不唯一的值,你需要一个不同的方法。让我知道如果是这样的话。

+0

urdearboy

+0

安装程序看起来像这样,输出顺着B列。对不起,以上不清楚。 – urdearboy

+0

不需要最后一个'If'语句。 '加入(dict.keys,“,”)'如果'dict.Count = 0'返回“”。当然,测试'dict.Count = 0'可能会稍微有效一些,但如果你不给它赋值的话,你可以消除'Else'块,因为'CustomVLookup返回'“。好的工作+1。 – 2017-10-18 19:33:10