
点亮☆星标,不错过精彩分享
在日常工作中,经常用简称去描述一些数据,比如银行简称,公司简称、英文简称等。

但如果在正式的场合,是不能用简称的,比如财务付款凭证,合同协议等,这时我们就需要根据简称查找返回全称。

在EXCEL中如何根据简称返回正确的全称呢?
今天我们介绍三个场景,你工作中一定遇到过,建议收藏教程,避免以后需要时找不到了。
一、有简称目录表
如果你的表中,有一个简单目录,比如这样的

这样就比较简单了,我们直接用VLOOKUP直接查找就行了。

=VLOOKUP(E2,Sheet1!A:B,2,0)这个相信大家都会。但这个方法有一些弊端:简称只能是我们目录中指定的简称,但实际工作中,这个简称是一个非标数据,不同的人口头上的简称不一样。
比如交通银行,有的人叫“交行”,有的人喜欢叫“交通”、“交通银行”等,这就会导致公式找不到。

二、无简称目录
如果你表中没有简称目录表,只有一个全称参考表,或者简称不确定,我们可以试一下这个方法,在VLOOKUP中使用通配符。

=VLOOKUP("*"&E2&"*",Sheet1!B:B,1,0)这个公式,我们就无须A列的简称,直接在全称中查找,比第一种方法适用范围又更灵活了。
但是这个方法,也有弊端:简称必须是在全称中连续的字符,如果不连续就会找不到,还是没能解决简称的非标准问题。

聪明的小伙伴可能会想到,这样写公式就可以了:

=VLOOKUP("*建*行*",Sheet1!B:B,1,0)这样是可以解决,但简称是绝对文字,不是单元格引用,你需要一个个写公式,无法一条公式填充解决。
三、终极解决方案
有没有一种方法,能直接解决简称非标输入的问题,即我想输入什么简称都可以找?可以用这条公式:
=FILTER(全称目录!$B$2:$B$26,BYROW(全称目录!$B$2:$B$26,LAMBDA(x,AND(ISNUMBER(FIND(REGEXP(E7,"."),x))))),"无")
公式解析:
1、先用REGEXP函数,将简称的文字拆分出来,再用FIND一个个在全称中查找


每个字都在全称中找到了,就会返回对应的数字,有某个字在全称中找不到,就会返回一个错误值。
2、再用ISNUMBER和AND判断每个字符都找到为TRUE时,就是该简称对应的结果;
3、用BYROW+LAMBDA逐行判断是否都找到,如果都找到了,说明简称每个字都出现在全称中,就是我们要找的结果了;

四、更简单的方法
如果你觉得上述的公式嵌套的方法,太复杂不好理解,我们可以用VBA自己写一个函数,比如函数的名字叫:fullname(代码我放在文章最后)。
把代码粘贴到VBE后台,就可以直接在表格中直接用这个函数,参数也很简单:
=fullname(简称单元格,全称区域)=FullName(E2,全称目录!$B$2:$B$26)

如果简称对应有几个值,比如输入简称“农行”,可能有“中国农业发展银行”和“中国农业银行股份有限公司”,里面都包括有“农”和“行”两个字。
我们可以再修改一下简称,直接出现唯一值,或者可以在目录表中,把“中国农行发展银行”删除,毕竟这个银行普通人用不到。
你学会了吗?这么实用的技巧,赶紧收藏保存一下吧。
FULLNAME函数的VBA代码:
Function fullname(rng1 As Range, rng2 As Range) As VariantDim cell As RangeDim keyStr As StringDim char As StringDim i As Integer, ii As IntegerDim allMatch%Dim resultArr() As Stringi = 0ii = 0keyStr = rng1.ValueIf rng1.Cells.Count <> 1 Thenfullname = "参数1只能是单个单元格"Exit FunctionEnd IfFor Each cell In rng2If cell.Value <> "" ThenallMatch = 0For i = 1 To Len(keyStr)char = Mid(keyStr, i, 1) ' 取出第i个字符If InStr(1, cell.Value, char) > 0 ThenallMatch = allMatch + 1GoTo liElseGoTo liEnd Ifli:Next iIf allMatch = Len(keyStr) ThenReDim Preserve resultArr(ii)resultArr(ii) = cell.Valueii = ii + 1End IfEnd IfNext cellIf ii = 0 Thenfullname = "无"ElseIf ii = 1 Thenfullname = resultArr(0)Elsefullname = "多个值"End IfEnd Function
代码使用方法:
1、打开 Excel,按Alt + F11打开 VBA 编辑器
2、右键工作表 → 插入 → 模块
3、将上面代码粘贴到模块中
4、关闭 VBA 编辑器,返回 Excel
5、在单元格中直接使用函数
想学习更多EXCEL函数和VBA技巧,推荐下面这两本教程:
#办公软件#办公技巧#wps#officel办公技巧#excel#VBA#函数公式#函数
关注我,学习更多高效办公小技巧!
往期干货文章学习推荐:
Excel输入【任意关键字】都能筛选查询结果!太高级了!怎么做?
Excel【一二三】级下拉菜单怎么做?99%人的只会设置一级,一个教程全讲清楚原理逻辑!
手把手教你用EXCEL手搓一个春晚收视率数据地图?地图根据数据自动变化!
分享高效办公技巧及免费自动化模版,避免以后需要找不到,请您持续关注哦
夜雨聆风