如果单元格包含“特定文本”,则返回其旁边单元格的值。类似于 VLOOKUP

如果单元格包含“特定文本”,则返回其旁边单元格的值。类似于 VLOOKUP

我有 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) 非常容易安装和使用:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除 UDF:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 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)))))

然后,您可以自动填充公式以填写其余数据。返回TRUEFALSE

相关内容