使用高级筛选实时搜索数据(转)
使用高级筛选实时搜索数据(转)
有一组数据,有时我们希望能实时检索数据,就像百度搜索那样。高级筛选为我们提供了这一可能。下边是我的原始数据(A4:C1251)。
下边先看下最终的效果。
如果我想搜名字中带“强”字的同学。我只需要在搜索栏输入“强”。效果如下。
也可以全名搜索,比如输入“张可”。
那么这是怎么实现的呢?
首先用到的就是高级筛选。高级筛选应用时,需要设置列表区域,即待筛选的数据;和条件区域,即筛选的条件。用工作表里的高级筛选功能确实可以实现上述功能,但是筛选结果,不会根据搜索框的值自动刷新。如果要实现自动刷新功能,就要用到VBA来辅助实现。
看一下VBA代码。
Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target = Range('B2') Then
Range('A4:C1251').AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range('A1:A2'), Unique:=False
End If
End Sub
这段代码的意思是,如果B2单元格(搜索框)的值变化了,那么对单元格区域A4:C1251进行高级筛选(AdvancedFilter:高级筛选函数),筛选结果在原位置显示(Action:=xlFilterInPlace),条件列表是A1:A2(CriteriaRange:=Range('A1:A2'))。
在高级筛选的时候,筛选条件为文本时,我们可以用通配符来设置。'?'可以代表任意单个字符,'*'表示若干个字符。比如第一个例子,筛选名字中带“强”的,下图 条件列表 A1:A2中,A2的公式为='*'&B2&'*',最终结果为 *强*,这就表示筛选条件为字符串中含'强'的文本。也可以设置成 '张*',这样筛选出的就是姓张的同学。
本例是以姓名为筛选条件的。也可以改成别的,比如课程。将A1单元格改成'课程名称',这样就以课程名来筛选了。然后搜索栏输入电路,就能找出所有课程名称中带有'电路'的课程。
介绍的内容比较少,大家多多发散思维,一定可以实现更实用,更复杂的功能。