excel lookup:如果不匹配,则两列之间的部分匹配删除一个字符并尝试

时间:2017-07-23 13:08:15

标签: excel excel-formula

在excel中我有两列A& B.列是原始数据,B列是查找数据。 C列是结果数据。

如果A匹配B(确切)得到B的值,如果不完全匹配则删除最后一个字符并尝试直到匹配。如果在逐个字符删除后没有匹配(重复整个单词),则需要输入NA(不可用)。

是否有可能在excel中实现这一目标?我试过VLOOKUP,但我没有得到如何循环。

示例:

A                       B                  c(Result)
Samsung                 Samsung            Samsung
Samsungflexwash         honeywell          Samsung
Samsungsbf              3M                 Samsung
honeywelllyric                             honeywell


A Column:

Samsung
Samsung
Samsungflexwash
Samsungsbf
honeywelllyric
honeywelllyric

B Column:

3M
Samsung
honeywell 

谢谢,

2 个答案:

答案 0 :(得分:0)

C1使用此数组公式并填写:

C1
=INDEX(B:B,MATCH(1,FIND($B$1:$B$10,A1),0))

控制 输入

enter image description here

P.S。 避免使用数组公式的完整列,因为它会变慢。在公式中使用合理数量的行。我使用B1:B10,但你可以使用数千,但不要满满B:B

一些解释

当在数组公式中时,表达式FIND($B$1:$B$10, A1)将生成一个数组,其中每个条目i是找到单元格Bi的内容的位置在单元格A1中(如果未找到,则为#NA)。然后MATCH函数在此数组中找到FIND返回1的位置;因为我们的目标是在B中找到一个匹配A1开头的单元格。最后,INDEX使用此位置并返回B列中匹配的单元格。

答案 1 :(得分:0)

这是一个非CSE数组类型公式。它正常输入。

它也是动态的。它将仅迭代B列中具有值的行。因此,它不会进行任何不必要的迭代,并且会根据B列中的值的数量增长或缩小

=INDEX(B:B,AGGREGATE(15,6,ROW($B$1:INDEX(B:B,MATCH("zzz",B:B)))/(ISNUMBER(MATCH($B$1:INDEX(B:B,MATCH("zzz",B:B)) & "*",A1,0))),1))

enter image description here