excel一对多查询新思路,自制多功能查询函数比vlookup函数更简单
发布时间:2022-07-17 02:17:18
在工作中我们经常会碰到根据某个单一条件去查找对应的数据值,这个时候我们常用的一个万能查询函数那就是vlookup函数,vlookup函数可以实现基本的向左、向右以及多条件值数据查询等功能。但是这个函数有个弊端就是,不能实现返回多个数据值。
如当我们在查询某个人当天所有门禁刷卡时间或当天人员的所有销售记录时候,从上往下查找只能查找出最上面的第一条数据,无法提取出整天的数据。如果要实现这个功能就需要用辅助操作来实现,会显得比较麻烦。那么今天我们就来讲讲自定义多功能查询函数和vlookup函数分别是如何解决这个问题的。
方法一、vlookup函数如何查找返回多个数据值
问题:提取张三7月1日所有刷卡记录
如上图效果图所示,当我们输入函数=VLOOKUP(ROW(A1),A:D,4,0)往下拖动,张三当天的所有刷卡记录都会显示出来,因为总共只有3条数据,所以第四条结果开始就会出现错误值。
操作方法:
第一步:首先用countif函数做一个辅助列,因为单纯的vlookup函数查询是无法返回多个数值的。插入A列,辅助列函数为:COUNTIF(C$2:C2,F$4)。
注意点:函数COUNTIF函数中C$2:C2,是非常有深意的,用相对引用的方式往下拖动,分别代表的数据区域则为:C$2:C3、C$2:C4、C$2:C5等。这样代表的意思就是可以查找出对应的人出现过多少次。
第二步:输入函数VLOOKUP(ROW(A1),A:D,4,0)进行数据查询,然后往下拖动即可返回姓名为张三的所有值。
注意点:vlookup函数第一参数使用ROW(A1)为条件值的目的是,通过对应姓名所在的数值来进行数据查询。比如第一条记录8:38分,选择函数ROW(A1)按F9,返回的是1;第二条记录10:15分,选择函数ROW(A1)按F9,返回的是2,以此类推。效果如下图所示:
方法二:自定义Mlookup多功能函数查找返回多个数据值
问题:提取张三7月1日所有销售单号
如上图效果图所示,输入函数:Nlookup(F4,C:D,2,-1),即可返回张三7月1日销售的所有单号:2018070101,2018070106,2018070111,是不是感觉比vlookup函数更加简单神奇。这需要用到的是VBA代码来自定义一个Nlookup函数。
操作方法:
第一步:按alt+f11进入代码编辑窗口,新建一个模块;
第二步:输入以下代码后,保存为宏文件,即可使用自定义的Nlookup函数,如果你需要修改为其他自己喜欢的函数,可以全部替换即可。
代码如下:
Function Nlookup(rg, rgs As Range, L As Integer, M As Integer)
Dim arr1, ARR2, 列数
Dim R, n, K, X, cc, sr As String
arr1 = rg.Value
ARR2 = rgs
If VBA.IsArray(arr1) Then
For Each R In arr1
If R <> "" Then
cc = cc & R
列数 = 列数 + 1
End If
Next R
Else
cc = arr1
End If
If M > 0 Then '非查找最后一个
For X = 1 To UBound(ARR2)
sr = ""
If 列数 > 1 Then
For q = 1 To 列数
sr = sr & ARR2(X, q)
Next q
Else
sr = ARR2(X, 1)
End If
If sr = cc Then
K = K + 1
If K = M Then
Nlookup = ARR2(X, L)
Exit Function
End If
End If
Next X
ElseIf M = -1 Then '查找所有值
For X = 1 To UBound(ARR2)
sr = ""
If 列数 > 1 Then
For q = 1 To 列数
sr = sr & ARR2(X, q)
Next q
Else
sr = ARR2(X, 1)
End If
If sr = cc Then
Nlookup = Nlookup & "," & ARR2(X, L)
End If
Next X
Nlookup = Right(Nlookup, Len(Nlookup) - 1)
Exit Function
Else '查找最后一个
For X = UBound(ARR2) To 1 Step -1
sr = ""
If 列数 > 1 Then
For q = 1 To 列数
sr = sr & ARR2(X, q)
Next q
Else
sr = ARR2(X, 1)
End If
If sr = cc Then
Nlookup = ARR2(X, L)
Exit Function
End If
Next X
End If
Nlookup = ""
End Function
学习完上面的两种查询多个数据的方法,你现在认为哪一种方法更加简单了?当然这个多功能函数还包含有其他的功能,赶快尝试一下吧。


猜你喜欢
- 不少人办公,采用原始的一些方法,比如插入数学公式,要么直接进入公式编辑器编辑,要么按照原始的路径一步步去插入,这样对于用数学公式少的人来说,
- Win10系统的电脑总是出现USB接口无法识别设备的问题,导致U盘、移动硬盘等无法使用,甚至连本来正常连接的USB鼠标都发生了异常,这严重影
- 咱们在 操纵WPS表格与Excel表格 停止 一样平常办公时, 常常 需求 建造 林林总总的表格, 咱们在表格 傍边想要换行的 时分,就 不
- Windows图片查看器是系统内置的图片查看工具,可能因为未知原因或人为失误,我们把桌面右键的Windows图片查看器弄丢了,该怎么找回图片
- Intel处理器命名规则是怎样的?如果用户需要组装一台计算机最常见的无疑是HQ和无后缀的Intel CPU,这些CPU的后缀是什么意思呢?在
- n卡滤镜快捷键alt加f3打不开怎么办?最近很多小伙伴在使用N卡游戏滤镜时都遇到了快捷键alt+f3没反应的情况,也不知道该怎么解决。为此,
- 大家在使用电脑时,经常会因为电脑屏幕过亮,让大家的眼睛过于疲劳,夜间使用也很不舒适,那么Win11如何设置深色模式呢?接下来就来一起看看吧。
- 微软推出了全新的win11系统,界面和功能与之前的windows系统有很大的差别,很多使用win7系统的小伙伴都在考虑要不要升级win11系
- 最近有刚升级Win10的用户反映,电脑很经常卡机,并且出现提示“开始菜单和Cortana无法工作”,这直接导致了开始菜单不能使用,这让用户非
- 虽然比预期的时间晚了两年,不过1月底微软还是宣布了Windows 10系统(以下简称win10)全球装机量突破10亿,其中有1亿用户都是最近
- 内核隔离是通过计算机进程与您的操作系统和设备隔离在一起,为恶意软件和其他攻击提供了增强的保护。近期有部分Win11用户反映自己的电脑无法打开
- 许多人都有将常用文件存储的网盘中的习惯,但这也带来了一个新的问题,那就是一些重要的资料和可能会在用户清理网盘的过程中被删除。而在遇到这种情况
- IMSQRT函数用于计算以x+yi或x+yj文本格式表示的复数的平方根。IMSQRT函数的语法如下:IMSQRT(inumber)其中,in
- 随着科技的进步,U盘的技术也在不断提高,但令人苦恼的是,U盘使用过程中损坏的情况屡见不鲜,而避免U盘损坏也成了广大用户的难题之一。接下来小编
- 大部分的新手不知道使用ps怎样加粗线条,原画线稿的图导入ps后发现线条太细,怎么加粗线条ps原画线稿,而本节就介绍了ps让线条加粗的教程,还
- 最近有xp系统用户反映,电脑一玩游戏就出现闪屏的现象,这是怎么回事呢?这种情况怎么办呢?本文将提供xp系统电脑一玩游戏就闪屏的故障原因及多种
- 清理我们电脑的缓存垃圾和深度清理,保证我们电脑的运行速度,可以使用一键清理垃圾,这样既方便又快捷。那如何使用一键清理垃圾清理呢?一键清理垃圾
- 我们经常会用到Word这款软件来进行一些文档的编辑,而我们在编辑文档之后难免会需要去统计整篇的字数,那么这个时候我们应该如何去操作呢?下面就
- 不少用户为了保护个人隐私,都会选择隐藏文件。但除了隐藏文件之外,还可以选择直接隐藏本地磁盘。与隐藏文件相比,隐藏整体本地磁盘更加方便。那么w
- 最近有一些win10专业版的用户反映用了Win10系统后,BIOS就像是罢工的样子,无法进入BIOS。那么Win10专业版怎么进入BIOS?