如果在键/值参考表中找到键,则写入值

时间:2015-09-04 16:12:04

标签: excel excel-formula

如果我有这样的参考表:

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

包含以下单元格的csv文件:

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

应用于Category coloumn的函数需要查找键值(来自Reference Tables),如果找到,则在ID coloumn中写入ID值,如下所示:

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

没有嵌套的IF条件,最好的方法是什么?

1 个答案:

答案 0 :(得分: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