我有一列(称之为A)数据,其中每个单元格包含一长串字符,例如:
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
这就是我想做的事情:
对于Col B中的每个关键字K. 检查Col A中的每个单元格以查看该条目是否作为子字符串存在 如果是,则在C列的相邻单元格中输入关键字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
我可以看到如何使用VBA类型结构来做到这一点......但是肯定必须有一种方法可以使用内置的Excel函数 - INDEX,HLOOKUP,SEARCH ......等来实现这一点。
我试过但没有成功。如果有人有更好的想法,请告诉我。
答案 0 :(得分:4)
假设每行最多只有一个匹配的单词,你可以在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))),"")