通过简称来查询全称并返回对应的开票名称

送人玫瑰,手有余香,请将文章分享给更多朋友

动手操作是熟练掌握EXCEL的最快捷途径!

我们经常会遇到通过简称来查询全称的情况。在帖子总结篇-LOOKUP函数实用终极帖中我就有过相关内容的论述。

但是今天这个题目有点特殊性。它最大的特点就在于,源数据看起来毫无规律可言,但需要通过简称来查询全称并返回对应的开票名称。具体的信息请看下图。

图标中A列销货名称可以看作是简称,B列是与之对应的开票名称。D列是具体的销货明细,我们可以将它看作是全称,现在要求根据A列的内容返回对应的开票名称。

01

由于源数据的规律性非常差,不能按照上面提到帖子中介绍的方法解决这个问题。

在单元格D2中输入公式“=LOOKUP(,0/FREQUENCY(-9^9,MMULT(ISERR(FIND(MID(D2,COLUMN(A:AZ),1),$A$2:$A$51))-1,ROW($1:$52)^0)),$B$2:$B$51)”并向下拖曳即可。

思路:

这里要利用最大模糊匹配的方法。

  • MID(D2,COLUMN(A:AZ),1)部分,将单元格D2依次从第一个、第二个、第三个...字符提取长度为1的字符串。COLUMN(A:AZ)表示从第1列到第52列

  • FIND(MID(D2,COLUMN(A:AZ),1),$A$2:$A$51)部分,利用FIND函数将上述结果在单元格区域$A$2:$A$51中查找

  • 利用ISSER函数将FIND函数返回的错误值转换为TRUE

  • ISERR(FIND(MID(D2,COLUMN(A:AZ),1),$A$2:$A$51))-1部分,是常用的技巧之一。将查找不到而返回的错误值转换为0,而能够查找到的转换为数值“-1”

  • MMULT(ISERR(FIND(MID(D2,COLUMN(A:AZ),1),$A$2:$A$5))-1,ROW($1:$52)^0)部分,利用MMULT函数计算数字部分的总和,数值部分越小,越说明"销货明细"拆分出来的每一个字在每行中被更多的查找到,也就说明了对应的开票名称是最有可能的开票名称

  • 最后,LOOKUP函数部分是我们经常使用的经典用法,这里不再详细介绍了

02

其实这个还是有一些瑕疵的,但不是公式的问题,而是源数据的问题。我们一直在强调,在数据录入的时候做好录入的规范性,将会给后面的工作带来极大的方便。这个例子再次很好地说明了这一点。

图标中涂黄色的几个单元格都是不能正确返回结果的数据。但在当前的源数据条件下,这个已经是最好的效果。

-END-

长按下方二维码关注EXCEL应用之家

面对EXCEL操作问题时不再迷茫无助

我就知道你“在看”

注意!前方有红包挡道!速点阅读原文消灭之!

推荐阅读
(0)

相关推荐