2015-09-04 75 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