用自定义函数联合IF函数实现“一对多”查询

本文介绍使用IF函数配合自定义聚合函数解决EXCEL中VLOOKUP函数无法实现的一对多查询问题。通过IF函数判断条件并返回相应值,再利用自定义聚合函数将所有符合条件的结果聚合在一起。

EXCEL中的VLOOKUP函数,大家使用的比较多,它实际是个查询函数,依据查询的条件,找到对应的行,可以返回该行某个指定列的单元格,但是它有个缺点,只能实现“一对一”查询,不能实现“一对多”查询,即如果有多个满足条件的结果,VLOOKUP函数只能返回第一个。

如何处理“一对多”的情况,经过我的一番尝试,找到了解决方案。我的解决方案是IF函数+自定义聚合函数。首先来看IF函数,IF函数判断是否满足某个条件,如果满足返回一个值,如果不满足则返回另一个值。巧妙地设置判断条件,就能实现VLOOKUP的功能,在条件判断中,输入一个公式,一个值与一个区域比较是否相等,如不相等,返回空;如相等,返回值为另外一个区域。

举例如下:IF(D4=$A$2:$A$9,$B$2:$B$9,"")

用IF函数进行了尝试,结果参见看上面的图片。实际返回一个数组,就是满足条件对应行另外一列的数值,满足条件返回对应单元格的数值,不满足返回空,基本实现了VLOOKUP的功能,而且是返回了所有的结果,实现了“一对多”。因返回的是数组,而一个单元格无法接收一个数组,单元格无法显示,需要想其它的办法。对于返回的数组,如果有一个聚合函数实现信息收集,就能在一个单元格显示,我突然想到了TEXTJOIN函数,该函数实现了字符连接功能,就是一个很好的聚合函数,但是抠门的微软只在OFFICE 365和部分EXCEL 2016版本中提供这个函数,其它的就没有了,没关系,既然你不提供,我就自己写一个,命名为TEXTJOINA函数,代码如下:

Public Function TextjoinA(str1)

Dim str2 As String

str2 = ""

For Each Data1 In str1

 If Data1 <> "" Then

 str2 = str2 & "\" & Data1

 End If

Next

TextjoinA = str2

End Function

自定义的函数+IF函数运行结果如下,多个结果之间用分隔符"\"隔开,之后用分列就可以了。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值