2015-09-04 64 views
0

如果我有一個參照表是這樣的:寫作價值發現鑰匙鍵/值參考表

Category | ID 
---------------- 
Cat1  | 12 
Cat2  | 13 
Cat3  | 14 

並用以下細胞csv文件:

Product Name | Category | IDs | ... 
--------------------------------------------- 
Pname1  | Cat1  |  | ... 
Pname2  | Cat1 Cat2 |  | ... 
Pname3  | Cat1 Cat3 |  | ... 

功能施加到類別coloumn需要查找用於如果發現關鍵值(從參考表格),並且,在這些ID coloumn寫入的ID值,如下所示:

Product Name | Category | IDs | ... 
---------------------------------------------- 
Pname1  | Cat1  | 12  | ... 
Pname2  | Cat1 Cat2 | 12,13 | ... 
Pname3  | Cat1 Cat3 | 12,14 | ... 

沒有嵌套IF條件的最好方法是什麼?

+0

是什麼,任何給定的記錄可能有類別的最大數量? –

+0

理論上沒有記錄可能具有的最大值。在需要的情況下,我可以計算它計算參考表的行,我插入所有可能的類別? – fbid

+2

是的,你可以用這種方式來計算,但現在這使得用公式解決問題非常困難。你最好的選擇是使用VBA宏。 –

回答

0

點擊Alt鍵 + F11和VBE打開時,立即使用下拉菜單插入►模塊(Alt鍵 + 中號)。將以下代碼粘貼到名爲Book1 - Module1(Code)的新代碼表中。

Function collect_IDs(rCATs As Range, rREF As Range) 
    Dim v As Long, vCATs As Variant, sIDs As String 

    sIDs = vbNullString 
    vCATs = Split(rCATs.Value2, Chr(32)) 
    For v = LBound(vCATs) To UBound(vCATs) 
     If CBool(Application.CountIf(rREF.Columns(1), vCATs(v))) Then _ 
      sIDs = sIDs & Application.VLookup(CStr(vCATs(v)), rREF, 2, False) & Chr(44) 
    Next v 
    If Right(sIDs, 1) = Chr(44) Then _ 
     sIDs = Left(sIDs, Len(sIDs) - 1) 

    collect_IDs = sIDs 
End Function 

點擊Alt鍵 + Q返回到您的工作表。像使用其他本地工作表函數一樣使用此用戶定義函數(又名UDF)。語法是:

= collect_IDs(<細胞與類別>,<查找表>)

你的情況,這會是這樣,

=collect_IDs(E2, $A$1:$B$4) 

您的結果應該是類似於以下內容。

Concatenate category lookups

+0

非常感謝您爲您的解決方案Jeeped。你知道是否有可能讓它在Open Office上運行? – fbid