专业编程基础技术教程

网站首页 > 基础教程 正文

Excel菜鸟的VBA学习笔记——01.宏取代Vlookup

ccvgpt 2025-05-03 12:41:57 基础教程 8 ℃

学习是一件很枯燥、痛苦的事情,小弟希望通过分享自己的学习笔记,获得继续下去的动力,有不足之处希望路过的大神多多指教,不胜感激!

在Excel中,Vlookup是非常高效的一个批量查询相关信息的函数。但是,当需要查询的数据达到几十万时,Vlookup函数会变得很低效,甚至影响到表格的运转。

Excel菜鸟的VBA学习笔记——01.宏取代Vlookup

于是,小弟通过以下的宏代码,“取代”了Vlookup函数,达到了自己想要的高效工作模式。

下图是示例:

代码原文:

Option Explicit

Sub Test1()

'定义变量

Dim t, i

Dim arr1, arr2

Dim dic1, dic2

'记录宏开始运行时间,关闭屏幕刷新

t = Timer

Application.ScreenUpdating = False

Sheets("宏学习1").Activate

'创建数组arr1,创建字典dic1,dic2

arr1 = Range("A2:B" & Cells(Rows.Count, "A").End(xlUp).Row)

Set dic1 = CreateObject("scripting.dictionary")

Set dic2 = CreateObject("scripting.dictionary")

'往字典dic1,dic2内循环加入自己想要的内容

For i = 1 To UBound(arr1)

If Not dic1.exists(arr1(i, 1) & arr1(i, 2)) Then

dic1.Add arr1(i, 1) & arr1(i, 2), arr1(i, 2)

End If


If Not dic2.exists(arr1(i, 1)) Then

dic2.Add arr1(i, 1), arr1(i, 2)

End If


Next

'如果字典和查询词放在同一个表,不需要加这一行代码

Sheets("宏学习1").Activate

'创建数组arr2

arr2 = Range("D2:E" & Cells(Rows.Count, "D").End(xlUp).Row)

For i = 1 To UBound(arr2)

If arr2(i, 1) <> "" Then

arr2(i, 2) = dic2(arr2(i, 1))

End If

Next

'将数组arr2计算出来的data,写入到对应的单元格

[D2].Resize(UBound(arr2), UBound(arr2, 2)) = arr2

'恢复屏幕刷新

Application.ScreenUpdating = True

'弹窗提示宏运行时间

MsgBox "程序耗时: " & FormatNumber(Timer - t, 4, -1) & "s"

End Sub

以上,小弟今天的学习笔记,希望能够帮助到需要的人,也希望能够获得路过大神的指导,谢谢!

Tags:

最近发表
标签列表