如果我有这样的参考表:
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条件,最好的方法是什么?
答案 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)
您的结果应与以下内容类似。