目的 在大量的数据中,快速查找与查找值部分匹配的所有数据。
示例工作簿与程序代码 如下图所示,工作簿包含两个工作表,一个工作表Data用作数据库,包含大量的数据;另一个工作表Search用来从数据库工作表Data中查找想要的数据并显示。
方法1:使用Range对象的AdvancedFilter方法 在工作表中定义名称 在Search工作表中定义的名称如下: C3单元格名称:search_string C8单元格名称:result_target
在Data工作表中将单元格区域z1:z2定义的名称为:filter_criteria
在“定义名称”对话框中直接定义的名称(隐藏的名称): Database=Data!$B$1:INDEX(Data!$1:$1048576,COUNTA(Data!$A:$A),COUNTA(Data!$1:$1)) result=Search!$C$8:INDEX(Search!$C$8:$XFD$1048576,COUNTA(Search!$C$8:$C$1048576),COUNTA(Search!$C$8:$XFD$1048576))
在Search工作表单元格C5中,使用下面的公式统计找到的记录数: =SUMPRODUCT( --(C9:C1048576>''))
设置工作表Search 设置Search工作表单元格C3的格式,在“单元格格式”的“保护”选项卡中取消“锁定”复选,以便于在“保护工作表”时仍能编辑该单元格。 保护工作表Search。
编写代码 在Search工作表对象模块中的代码为: 说明:
方法2:使用ADO 在工作表中定义名称 除以下变化外,工作表中名称与方法1相同。 C9单元格名称:result_target
在“定义名称”对话框中直接定义的名称(隐藏的名称): Database=Data!$A$2:INDEX(Data!$2:$1048576,COUNTA(Data!$A:$A),COUNTA(Data!$1:$1)) result=Search!$C$9:INDEX(Search!$C$9:$XFD$1048576,COUNTA(Search!$C$9:$C$1048576),COUNTA(Search!$C$8:$XFD$1048576))
在Search工作表单元格C3中,使用下面的公式统计找到的记录数: =SUMPRODUCT((C9:C65536>'') * 1 )
设置工作表Search 除以下变化外,工作表设置与方法1相同。 与方法1相比,本方法增加了一个复选框,其目的是为了避免内存泄漏而导致计算机崩溃。其工作表界面如下图所示。 编写代码 在Search工作表对象模块中的代码为: 说明:
小结
本文属原创文章,转载请联系我(xhdsxfjy@163.com)或者注明出处。 欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。 |
|