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))),"")