代替VLOOKUP函数,用Application.Match怎么样?结果却大大出乎我的意料!

文摘   教育   2024-10-25 23:59   江苏  

关于本公众号】了解一下,欢迎关注谢谢!

快速浏览

实用案例

|日期控件||简单的收发存||收费管理系(Access改进版)|

|电子发票管理助手||电子发票登记系统(Access版)|

|文件合并||表格拆分||审计凭证抽查底稿|

|中医诊所收费系统(Excel版)||中医诊所收费系统(Access版)||银行对账单自动勾对|

|印章使用登记系统|

收费使用项目

|财务管理系统||工资薪金和年终奖个税筹划||新税法下工资表模版|

内容提要

  • Application.Match函数
  • 利用字典代替VLOOKUP函数
大家好,我是冷水泡茶,前几天在EXCELHOME论坛上看到一个贴子,原贴找不到了,是关于数据查询的问题。大概是用VLOOKUP查询太慢,数据文件有50M之巨。
他的问题是,想用字典,但不知道一个关键字要对应几个数据,在字典中该如何处理。
我们先来看一下数据表格:
1、职工档案
2、查询表,从职工档案表中查询部分人员的部分信息:
需求分析:
1、这样的问题,我们一般采用字典来解决,如果要对应多个字段,我们可以用字典嵌套,如果数据量特别大,我们也可以多个字段存到一个数组里。相关的案例,我们分享过一个:

数十万条数据查询匹配:VLOOKUP太慢,数组字典来提速,局部更新更高效!

2、我突然想到前两天我们用过Application.Match函数,直接匹配关键字在数组中的位置,从而取得相应的值,是不是更快一点呢?
基本思路
方法一:使用Application.Match函数
1、先把职工档案数据装入数组arr,定义一个函数myMatch,根据查询表中的第一列、第一行关键字,从arr中提取相应的值。
Function myMatch(arr(), rowField, colField, Optional matchCol As Long = 1)    On Error Resume Next    Dim row(), col()    Dim iRow As Long, iCol As Long    row = Application.Index(arr, 0, matchCol)    col = Application.Index(arr, 1)    iRow = Application.Match(rowField, row, 0)    iCol = Application.Match(colField, col, 0)    myMatch = arr(iRow, iCol)End Function
2、把查询表装入数组temp,循环行、列,根据第一列职工编号,各表头字段,使用myMatch函数取值,填入数组temp中的对应位置。
3、再把temp数组回写到查询表。
4、结论:myMatch函数有点像工作表函数Index+Match,只不过查询目标是在数组中,我以为速度会很快,但事实恰恰相反,数据量一大,慢得怕人。后来,不用这个myMatch函数,根据职工编号,用Application.Match定位到数组arr中的相应行号,然后把对应的姓名、年龄等数据直接写入数组temp,速度是快了一点,但还是有点慢。
方法二:使用字典,以工号为key
1、先把职工档案数据装入数组arr,再循环arr,把需要的数据装入字典:
For i = 2 To lRow    dic(arr(i, 1)) = Array(arr(i, 2), arr(i, 6), arr(i, 9), arr(i, 11))Next
2、把查询表数据装入数组temp,根据第一列职工编号,到字典中提取数据,写入temp 。
3、把temp回写到工作表,这回速度快多了。

完整代码详见当天另一条推文!

后记

1、在查询表的Change事件中,还写了根据A列改变,更新数据的代码,使用了myMatch自定义函数,速度也很慢,可改为使用字典,时间关系,我们不搞了。

2、职工档案数据是我模拟的,身份证号码承便搞了18位,原来准备生成一些符合规则的身份证号的,也是来不及搞了,以后再说。

好,今天就到这里,我们下期再会!


~~~~~~End~~~~~~

安利小店
安利的牙膏非常不错,用了以后就不想再用其他的了;洗洁精洗衣液也是日常必备,用过都说好!

合谷医疗
合谷医疗专攻各种疑难杂症,尤其擅长抑郁症焦虑失眠儿童神经发育异常多动症自闭孤独症腰颈椎疾病治疗,可谓神乎其技!体验过的直呼早点来就好了

喜欢就点个、点在看留言评论、分享一下呗!感谢支持!

案例文件分享说明

  • 案例文件可免费分享,但需符合以下要求:

  • 关注点赞点在看点...留言,方便的话分享一下就完美啦!如果不便走上面的“流程”,请打赏,万分感谢!

  • 请添加上方我的合谷医疗企业微信,案例文件通过微信发送。如有定制需求,亦可通过微信联系。

  • Excel问题,请在文章下面留言讨论!或者加入我的付费交流群提问

VBA编程实战
Excel应用案例、Excel VBA、公式函数使用技巧分享,思路解读...... 这里有鲜活案例、实用的技巧......
 最新文章