我有 2 张表,一张表列出了零件 (sku) 和适合该零件的所有车辆 (fitment),并以“^^”分隔,如下所示:
sku | fitment
1 |car1 ^^ car2 ^^ car3
2 |car2 ^^ car3
3 |car1
4 |car1 ^^ car 2
5 |car3
在我的第二张表上,我有一份如下的汽车列表:
fitment
car1
car2
car3
对于第二张表中的每辆汽车,我想在第一张表中搜索该特定文本的装配,并返回 SKU(如果找到的话)(用分隔符分隔)。所以它看起来像这样:
fitment |skus
-------------
car1|1,3,4
car2|1,2,4
car3|1,2,5
答案1
尝试一下这个小用户定义函数:
Public Function CarFinder(clist As Range, carID As String)
Dim cell As Range
CarFinder = ""
For Each cell In clist
If InStr(1, cell, carID) > 0 Then
If CarFinder = "" Then
CarFinder = cell.Offset(0, -1).Value
Else
CarFinder = CarFinder & "," & cell.Offset(0, -1).Value
End If
End If
Next cell
End Function
使用示例:
用户定义函数 (UDF) 非常容易安装和使用:
- ALT-F11 打开 VBE 窗口
- ALT-I ALT-M 打开新模块
- 粘贴内容并关闭 VBE 窗口
如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除 UDF:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要从 Excel 使用 UDF:
=CarFinder($B$1:$B$100,Z9)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其工作!
答案2
Gary's Student's UDF 更接近于您想要做的事情,但这里有一个无需 VBA 即可运行的版本。问题在于您需要为每个 SKU 设置单独的列。像这样组织您的输出,汽车在左侧,SKU 在顶部:
1 2 3 4 5
car1
car2
car3
然后,假设car1
在单元格 D2 中,1
因此在单元格 E1 中,在单元格 E2 中使用此公式:
=NOT(ISERROR(SEARCH($D2,INDEX([Fitments],MATCH(E$1,[SKUs],0)))))
然后,您可以自动填充公式以填写其余数据。返回TRUE
或FALSE
。