2012-10-20 18 views
-3

細胞A1在以輸出多個文本的細胞檢查多個值= 10,21,34,23,45,67在另一個

需要在細胞A2一個公式,執行以下操作:

檢查A1包含10時,如果是,則「可口可樂」
同時檢查A1包含21,如果是,則追加‘百事可樂’
同時檢查A1包含34,如果是,則追加「七喜」
同時檢查A1包含23,如果是,則追加「雪碧」,
還要檢查是否A1包含45若是,則追加「芬達」
同時檢查A1包含67如果是的話,追加「佳得樂」
此外,檢查是否A1包含99若是,則追加「紅牛」
...
等等。

所以細胞A2的用於上述示例的值的輸出會是這樣的:

Coca Cola , Pepsi , 7Up , Sprite , Fanta , Gatorade

注意,輸出值由" , "(即<space> comma <space>
分離這是可能的,爲公式在1細胞?有大約20個值來檢查。

+0

我相信,隨着一個公式做它需要多個'Find' /其他基於陣列的公式,將得到凌亂得很快。 VBA有一個快速解決方案 - 這是一個選項嗎? – RocketDonkey

+0

我的知識非常有限。如果有什麼清楚的解釋,當然。 :) –

回答

1

我認爲,唯一可行的方法是用一個用戶定義函數(UDF

某處設置它,把你的價值列表,字符串對您的工作簿(在這個例子中,我將使用G1:H7 ),第一列中的值,第二列中的值。

將這個代碼模塊中

Function ListRange(rValues As Range, rLookup As Range) As String 
    Dim ListOfValues() As String 
    Dim OutputList() As String 
    Dim i As Long, j As Long 
    Dim v As Variant 

    ListOfValues = Split(rValues.Value, ",") 
    ReDim OutputList(LBound(ListOfValues) To UBound(ListOfValues)) 
    j = LBound(ListOfValues) 
    For i = LBound(ListOfValues) To UBound(ListOfValues) 
     v = Application.VLookup(Val(ListOfValues(i)), rLookup, 2, 0) 
     If Not IsError(v) Then 
      OutputList(j) = v 
      j = j + 1 
     End If 
    Next 
    If j = 0 Then 
     ListRange = "" 
    Else 
     ReDim Preserve OutputList(LBound(OutputList) To j - 1) 
     ListRange = Join(OutputList, " , ") 
    End If 
End Function 

這樣稱呼它

=ListRange(A1,$G$1:$H$7) 
+0

這完全按照我的需要!謝謝! –