Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现

222 次浏览

Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现插图

Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现插图1

前面我已经实现了单列数据的拼音首字母输入提示

但是显然某些场景还是不够用,比如现在有一个省市区三级地址输入的需求,如果直接填写就容易填错,即使使用三级菜单的形式,选项太多,选取也很麻烦,结合之前的拼音首字母提示,最好的方式应该是直接输入首字母然后得到搜索结果,选择结果条目输入,这个搜索面板的功能,在我VBA175例里199 窗体中textbox加listbox模糊搜索录入标准模板用法,这节课实现了搜索面板的基本套路,现在我们给他加上拼音搜索,同时因为考虑到数组模糊搜索是一个高频操作,一个项目,一个窗体里,都可能多次使用,所以我把它封装为一个类模块clsArrayFilter,原理也很简单,源文件下载地址见文末, 组件实现原理基本步骤如下

    • 1. initArrToPy(来源数组,t搜索列)

传入源数据,对每一行数据合并,调用py函数计算出首字母,存到拼音数组里,拼音数组的首列存源数据合并结果,第2列存拼音结果,第3列存原始数据行号,用来作为搜索目标,这里有一个附加参数,列数组,可以指定对哪些列开启搜索,因为有时候列数很多并不是所有列都参与拼音搜索,可以起到加速效果同时也可以过滤一些不想要的搜索目标。

Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现插图2

    • 2. FilterByPy(key,skiptop-0) 拼音筛序函数
    • 依次遍历搜索拼音数组,这里要处理一个空格分隔的情况,调用子函数pyfilter来完成,它负责按空格拆分来源关键字,再逐个检查是否包含在拼音搜索数组中,先按用户输入源数据检测,再按转拼音的关键字搜索,这样用户无论输入原始汉字,还是输入拼音,甚至是汉字和拼音混合方式,都可以得到搜索结果,搜索的结果先存到索引结果数组,最后再从源数据取出装入结果数组返回,

Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现插图3

  • 3. 窗体中调用

    首先声明窗体全局变量Dim ArrayFilter As New clsArrayFilter

    在初始化事件中,对源数据状态初始化

    <span class="code-snippet_outer"> <span class="code-snippet__built_in">Set</span> rng = Sheets(<span class="code-snippet__string">"省市区"</span>).Range(<span class="code-snippet__string">"A1:C"</span> & Sheets(<span class="code-snippet__string">"省市区"</span>).Cells(Rows.Count, <span class="code-snippet__string">"A"</span>).End(xlUp).Row)</span><span class="code-snippet_outer">    ArrayFilter.initArrToPy (rng.Value)</span>

最终调用搜索功能就很简单了,写一个模糊搜索函数

Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现插图4

在change事件和按钮中点击调用这个函数即可

Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现插图5

下面再看另一组数据的搜索效果

Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现插图6

买课程可进永久答疑群,课程可免费试学点击下方链接即可

郑广学Excel实战教程

Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现插图7

源文件下载地址 点击微信文章付费后可见

Excel表格中实现省市区拼音搜索提示功能 VBA类模块实现