2

我有一列(称为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 ......等。

我试过但没有成功。如果有人有更好的想法,请告诉我。

4

1 回答 1

5

假设每行最多只有 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))),"")

于 2012-09-12T21:27:34.360 回答