2017-10-18 144 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