EXCEl中,只需输入关键字就能实现自动查询,而且关键字来自表中任何一列:
先看看动态图:
有两种方法可以实现这一功能:
第一种方法:是使用FILTER函数来制作查询
输入公式:
公式拆解如下:
(1)=FIND($H$1,A2:A24)
find函数的参数(查找值,查找范围)
这个函数会查找在A2到A24范围内的单元格中,是否包含H1单元格中的关键字,并返回该关键字在查找范围里的位置(以数字表示)。
如果找到,就返回该位置;如果没找到,就返回错误值。
如这里查找“高”,就会以1来显示
(2)使用IFERROR函数包装FIND函数
IFERROR(FIND($H$1,A2:A24))
因为filter第二参数是筛选条件,是根据TRUE来提取筛选结果的。所以要嵌套IFERROR函数使数字以逻辑值TRUE表示,#N/A以0来表示。
(3)使用FILTER函数
filter函数(显示筛选结果,筛选条件)
这个公式会筛选出A2到E24范围内,A列中包含H1单元格中关键字的所有行。
=FILTER(A2:E24,IFERROR(FIND($H$1,A2:A24),0))
这样就把姓名是含”高“的人员信息找出来。
(4)我们要实现多列的关键字查找。
只需在FILTER函数的筛选条件中增加相应的FIND函数。
” “来连接筛选条件,代表只要满足一个条件就可以。
想同时查找A列和B列中包含关键字的行,比如现在要查找第2列中的”男“,只需要增加一个条件: IFERROR(FIND($H$1,B2:B24),0)
输入公式:
=FILTER(A2:E24,IFERROR(FIND($H$1,A2:A24),0) IFERROR(FIND($H$1,B2:B24),0))
同理,如果要查找五列中的任意一列包含关键字,只需继续增加FIND函数的条件即可。
最终公式为:
=FILTER(A2:E24,IFERROR(FIND($H$1,A2:A24),0)
IFERROR(FIND($H$1,B2:B24),0)
IFERROR(FIND($H$1,C2:C24),0)
IFERROR(FIND($H$1,D2:D24),0)
IFERROR(FIND($H$1,E2:E24),0))
效果如以下动态图所示:
第二种方法:使用VBA代码实现查询。
这种方法需要有一个查询工作表界面和另一个放数据源的工作表。
1、插入文本框
在查询工作表中插入一个文本框,选开发工具----插入----ACTIVEX控件-----文本输入框
此时,你的鼠标指针会变成一个十字形。
在工作表上点击并拖动鼠标,以绘制一个合适大小的文本框。
如果你没有看到“开发工具”选项卡,你需要先启用它。
(1)点击“文件”菜单,然后选择“选项”。
(2)在“Excel选项”对话框中,选择“自定义功能区”。
(3)在右侧的主选项卡列表中,勾选“开发工具”。点击“确定”以应用更改。
2、右点查询工作表----查看代码
(3)然后在代码框里:输入这两段代码
我把代码放在下面,你只需要拷贝就可以用了。在使用此代码时,请确保你的工作表命名与代码中的一致(例如,“数据源”和“查询”)。
Private Sub textbox1_Change()
If Len(TextBox1) >= 1 Then
Call 查询数据
End If
End Sub
Sub 查询数据()
Dim str As String
arr = Sheets("数据源").Range("A2:E" & Sheets("数据源").Cells(Rows.Count, 1).End(xlUp).Row).Value
Range("A4:E65535").ClearContents
j = 4
For i = 1 To UBound(arr)
str = arr(i, 1) & arr(i, 2) & arr(i, 3) & arr(i, 4) & arr(i, 5)
If str Like "*" & TextBox1.Text & "*" Then
Cells(j, 1) = arr(i, 1)
Cells(j, 2) = arr(i, 2)
Cells(j, 3) = arr(i, 3)
Cells(j, 4) = arr(i, 4)
Cells(j, 5) = arr(i, 5)
j = j 1
End If
Next i
End Sub
然后把文件保存为启动宏的工作簿”.xlsm“。因为”.xlsx“文件是保存不了代码的。
两种方法的不同之处在于:
使用VBA代码时,无论数据源增加多少行或列,你都不需要修改公式。只需在代码中相应的地方增加或修改列即可。
而使用FILTER函数时,每增加一列筛选条件,都需要在公式中增加相应的FIND函数。
你学会了?你会用哪种方法,请在评论区留言哦。
评论 (0)