2016-09-16 166 views
0

我發現這個VBA,它能夠爲所有的匹配值恢復到使用一個標準來匹配一個單元:VLOOKUP有多個標準,返回一個單元格的值

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匹配返回值。結果應該是

+0

你可以舉一些例子//你的數據是什麼樣的? – CallumDA

回答

2

這裏有一個稍微不同的方法。

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移輸入,而不是輸入來確認。如果正確完成,Excel將在公式周圍放置{}

enter image description here


如果你想返回完整的列中,您可以簡單地使用:

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

在常規的形式,它會在一個單元格返回8 3 3 9 2 3


如果您有Office Excel的365是TEXTJOIN天然地存在在這兩種情況下進入像上面的公式。

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

+0

如果列按順序混合,它會有所作爲嗎?由於目前的訂單是A B C,如果它是C A B呢? – Martin

+0

@Martin沒有一點只是改變範圍來匹配。並確保使用Ctrl-Shift-Enter而不是Enter鍵將其作爲數組輸入。 –

+0

哪個選項需要更長的時間來計算?使用VBA或公式本身?你會建議哪一個,因爲我期待着大約15k-20k行的工作。 – Martin

相關問題