Excel数据多使用vlookup太慢!使用vlookuptoo
当我们使用excel检索数据时经常使用vlookup函数进行查找,vlookup函数的强大不用多说,但随着我们检索的数据达到好几万是vlookup会变得很慢很卡,少则几分钟,多则个把小时,效率大打折扣。经历过等待大半个小时的痛苦后,寻思解决方案。在网站寻找解决方法时解决方法时使用VBA中字典进行索引查找,vba字典采用哈希表算法,查找速度极快,加快得出检索结果,尝试一番觉得字典替换vlookup解决数据多问题速度极快、效果明显,决定写出小工具方便使用。
这里简单理顺一下思路,首先先简单构思VBA代码如何进行简单检索,首先需要四个数组,一个数组存放源数据来做字典的Key,一个数组存放源数据字典的Value,还剩两个数组存放目标值用来与源数据字典进行匹配并保存最终结果。
'1、定义字典
Set Dict = CreateObject("Scripting.Dictionary")
'2、获取所需工作表行数
RowsNum = ThisWorkbook.Sheets(1).UsedRange.Rows.Count
'3、取得数组
Arr = .Range("A1").Resize(RowsNum)
'4、遍历两个源数组添加到字典中
For n = 1 To RowsNum
If Not Dict.Exists(Arr(n, 1)) Then
Dict.Add Arr(n, 1), Arr_Value(n, 1)
End If
Next n
'5、遍历目标数组匹配所得源字典,把结果写入新数组中
For n = 1 To NewRowsNum
NewArr(n, 1) = Dict(Arr_Search(n, 1))
Next n
'6、写入得到的新数组结果
.Range(NewRowsNum & 1).Resize(NewRowsNum, 1) = NewArr
以上是基本代码,可以经过进一步构思加工得到窗体Vlookup小工具。
VlookupTool小工具
使用方法:
打开vlookup工具,按快捷键{Alt}+{方向键 ↑}; 或者点击“视图”→点击“宏”→选中VlookupTool宏→点击“执行”; 然后就可以激活窗口使用啦
工具介绍:
窗体设计比较简洁,看图↓
![](https://img.haomeiwen.com/i12333370/0e41ce7d2e4bb5f3.png)
1、其中蓝色框是查找范围(数据源)及匹配哪一列的值,绿色框是需要查找的值及填充列,与Excel自带VLOOKUP函数关系请看上图;
2、选择列时以下拉框形式选择,显示内容为工作表第一行的值,假如为空值显示NULL,选择完成后自动读取当前列字母及有效行数显示在下面的灰色框;
3、“起始行”代表把匹配结果从选择的列中第几个单元格往下写入,通常除去首行就是在第二行开始,默认值为2;
4、“替换无结果值”按需勾选,可以将无法索引的结果替换为特定的值,默认勾选,默认替换值为#N/A;
5、“重复结果串联值”按需求勾选,不勾选时遇到当索引有多个结果时取第一个值,勾选时将多个结果连接一起,用特定值相隔,默认替换值为&,默认不勾选;
6、勾选“替换无结果值”和“重复结果串联值”运行时会多了一点运算,所以时间耗费多那么一点点。
7、运算完成后显示查找处理行数可能会比实际行数大,这属于正常情况。因为表格最后的一些行数单元格有数据被清空内容后没完全把行删除,读取行数时会把这些行数也算进去,不影响最终结果,理论导致运算时间偏长一点。
![](https://img.haomeiwen.com/i12333370/75a7aa958c68b9cb.png)
测试两边为48万行数据进行索引匹配,只耗费18秒,尝试上面所说勾选“替换无结果值”“重复结果串联值”两功能耗费21秒左右,差距可以忽略,工作效率大大提高有木有。
下载链接:
百度云下载链接:https://pan.baidu.com/s/1bRsR4twtk3bvj3GP27SLdQ
提取码:re9n
想看码源的请到Github:https://github.com/StinkCat/VlookupTool