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函数运行结果如下,多个结果之间用分隔符"\"隔开,之后用分列就可以了。”
本文介绍使用IF函数配合自定义聚合函数解决EXCEL中VLOOKUP函数无法实现的一对多查询问题。通过IF函数判断条件并返回相应值,再利用自定义聚合函数将所有符合条件的结果聚合在一起。

被折叠的 条评论
为什么被折叠?



