excel:如何识别包含来自关键字列表的文本关键字的行

我有一列(称为A)的数据,其中每个单元格包含一个长长的string,例如:

COLUMN A HORNBACH BAUMARKT ETOY, ETOY ALIGRO, CHAVANNES-PR DIPL. ING. FUST AG,ETO, ETOY AGIP SUISSE SA 224, LAUSANNE AMAZON MEDIA EU, LUXEMBOURG MIGROS M EPALINGES, EPALINGES HORNBACH BAUMARKT ETOY, ETOY MANOR AG - 390, BASEL MANOR AG - 390, BASEL GLOBUS LAUSANNE, LAUSANNE 

我还有另一列中的关键字的另一个列表(称为B),例如

 COLUMN B MSFT Amazon Hornbach Jumbo OBI Lipo Ikea Coop Migros Casino 

这是我想要做的:

对于列B中的每个关键字K检查列A中的每个单元格以查看该条目是否作为子string存在如果存在,则在列C中的相邻单元格中input关键字K.如果不是,则将相邻单元格留在列C保持不变对下一个关键字K重复

结果应该是:

 COLUMN A ----------------------------------> COLUMN C HORNBACH BAUMARKT ETOY, ETOY --------------> Hornbach ALIGRO, CHAVANNES-PR DIPL. ING. FUST AG,ETO, ETOY AGIP SUISSE SA 224, LAUSANNE AMAZON MEDIA EU, LUXEMBOURG ---------------> Amazon MIGROS M EPALINGES, EPALINGES -------------> Migros HORNBACH BAUMARKT ETOY, ETOY --------------> Hornbach MANOR AG - 390, BASEL MANOR AG - 390, BASEL GLOBUS LAUSANNE, LAUSANNE 

我可以看到如何使用VBAtypes的结构来做到这一点…但肯定必须有一种方法来使用内置的Excel函数 – INDEX,HLOOKUP,SEARCH …等

我试过但没有成功。 如果有人有一个更好的主意,请让我知道。

假设每行最多只有1个匹配的字,那么可以在C1中使用此公式

=IFERROR(LOOKUP(2^15,SEARCH(B$1:B$10,A1),B$1:B$10),"")

IFERROR函数仅在Excel 2007或更高版本中可用,对于早期的Excel版本,请尝试此修改

=LOOKUP("zzz",IF({1,0},"",LOOKUP(2^15,SEARCH(B$1:B$10,A1),B$1:B$10)))

如果你想得到多个匹配,在不同的单元格中,那么你可以在C1中使用这个“数组公式”,按CTRL+SHIFT+ENTER ,并尽可能复制(尽可能匹配最大匹配)

=IFERROR(INDEX($B$1:$B$10,SMALL(IF(COUNTIF($A1,"*"&$B$1:$B$10&"*"),ROW($B$1:$B$10)-ROW($B$1)+1),COLUMNS($C1:C1))),"")

如果A1在列表中包含3个字,那么将在C1,D1和E1中填充这些字,F1等将保持空白

按照意见修改:

公式中的第一个范围(INDEX的第一个参数)定义了从中取得结果的范围,以便将其更改为Z列,只需更改该部分即

=IFERROR(INDEX($Z$1:$Z$10,SMALL(IF(COUNTIF($A1,"*"&$B$1:$B$10&"*"),ROW($B$1:$B$10)-ROW($B$1)+1),COLUMNS($C1:C1))),"")