乐于分享
好东西不私藏

看完这篇Excel VBA数组攻略,我的8848钛金手机终于不卡了

本文最后更新于2026-03-12,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

看完这篇Excel VBA数组攻略,我的8848钛金手机终于不卡了

哈喽,我是你的老朋友小牛牛。

昨天后台有个粉丝给我发私信,上来就是六十秒的语音矩阵。我颤抖着点开,只听他声嘶力竭地喊:

“救命啊!我写了个VBA循环,泡了杯咖啡它还在转;我去开了个会,回来它还在转;我用它处理了十万行数据,我的电脑风扇转得像要起飞去火星!”

隔着屏幕,我都感受到了他那台电脑的绝望。

打住!别再用那种“一行一行啃单元格”的笨方法了。今天我们就来聊聊VBA中的超级飞侠——数组(Array)。

如果你学会了数组,你处理数据就不是在骑自行车,而是在坐高铁。

01. 什么是数组?其实就是“上下铺”

很多新手一听“数组”俩字就头疼,觉得这是计算机高深的理论。

打住!

你把Excel工作表想象成一个大学宿舍。

单元格:就是一个个单间,你去拜访一个同学(读取一个数据),得跑一趟。

数组:就是你们宿舍的上下铺。它是一个放在内存(你可以理解为宿管大妈的大脑)里的连铺大通铺。你只要一次性把所有人(所有数据)从房间(工作表)里喊出来,站到走廊里(数组里),你想怎么点名就怎么点名,再也不用来回开门关门了。

在VBA里,数组就是让你在内存里开辟的一块临时停车场。

代码看一眼就懂了:

Dim arr(1 To 10) As String  ‘声明一个可以睡10个人的上铺(一维数组)

Dim brr(1 To 5, 1 To 3) As Integer ‘声明一个5行3列的豪华通铺(二维数组)

02. 没有数组的VBA,等于用手榴弹砸核桃

我们先来感受一下“没文化”的VBA有多可怕。

假设你有10000行数据,需要把A列的数据全都乘以2。

青铜选手(单元格循环法)会这么写:

Sub 青铜操作()

    For i = 1 To 10000

        Cells(i, 2) = Cells(i, 1) * 2

    Next i

End Sub

这段代码看起来没毛病对吧?错!大错特错!

它干了什么破事?它跟Excel谈判了一万次!

第1次:“报告,请把第1行A列给我,我算完还给你。”

第2次:“报告,请再把第2行A列给我……”

Excel烦死了:“你有病吧,不能一口气说完吗?”

这种写法,VBA和工作表之间的每一句对话,都要消耗巨大的资源。这就是你电脑卡死的根源 。

03. 用数组:把大象装进冰箱只需要三步

王者选手(数组法)会这么写:

Sub 王者操作()

    Dim arr As Variant

    Dim i As Long

    ‘ 第一步:打开冰箱(一次性把所有数据抓进数组)

    arr = Range(“A1:B10000”).Value

    ‘ 第二步:把大象装进去(在内存里疯狂计算,Excel在外面晒太阳)

    For i = 1 To 10000

        arr(i, 2) = arr(i, 1) * 2

    Next i

    ‘ 第三步:关上冰箱(一次性把结果扔回给Excel)

    Range(“A1:B10000”).Value = arr

End Sub

看到区别了吗?

前者:跑了10000次腿。

后者:就跑2次腿(一次读取,一次写入)。

这就是为什么别人的代码是“啪啪啪”瞬间完成,你的代码是“滴滴滴”转圈圈 。用数组,就是尊重你的电脑,尊重你的时间。

04. 动态数组:你要学会给数组“撑伞”

还有一种情况最气人:你根本不知道数据有多少行。

昨天有500行,今天老板一拍脑门加了2000行。如果你写死了数组大小,比如 Dim arr(1 to 500),今天程序就直接崩给你看。

这时候,就需要动态数组登场了。

动态数组就像伸缩晾衣架,来多少衣服撑多少杆。

Sub 智能晾衣架()

    Dim arr() As Variant  ‘ 先声明一个空架子(动态数组)

    Dim LastRow As Long

    LastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ‘ ReDim就像给衣架拧螺丝,确定长度

    ReDim arr(1 To LastRow, 1 To 2)

    ‘ 甚至可以用Preserve保留原有数据的情况下,再加一列(撑长一点)

    ‘ ReDim Preserve arr(1 To LastRow, 1 To 3)

    ‘ 后续操作…

End Sub

划重点:ReDim Preserve是个好东西,但只能改最后一维的大小。你要是瞎改,数据会丢,就像你撑衣架太用力,衣服掉下来一样 。

05. 二维数组 vs 工作表:傻子才分开看

绝大多数人处理表格数据,用的是二维数组。

因为一张表就是由行(第一维)和列(第二维)组成的。

来个段子加深记忆:

一位老程序员在写VBA,他媳妇问他:“二维数组到底是个啥?”

程序员说:“你去超市买鸡蛋,一板鸡蛋30个,3行10列。你要拿第2行第3列那个鸡蛋,你不能伸手进冰箱乱掏,你得说‘arr(2,3)’。这就是二维数组。”

实操中,二维数组从Excel中来,回Excel中去,浑然天成。

Sub 二维数组实战()

    Dim myArray As Variant

    ‘ 瞬间把区域装进内存

    myArray = Range(“A1:D100”).Value

    ‘ 在内存里修改:把第三列(C列)数据后面都加个“元”

    For i = 1 To 100

        myArray(i, 3) = myArray(i, 3) & “元”

    Next i

    ‘ 瞬间写回

    Range(“A1:D100”).Value = myArray

End Sub

你感觉不到它跑了100次循环,因为这一切都在内存里发生,像闪电一样快 。

06. 终极奥义:让数组帮你“删繁就简”

数组除了快,还有一个绝活:让你的代码变短。

比如你要提取一堆乱七八糟字符串里的数字(比如“华为手机P50-128G”要提取“128”),不用写复杂的正则,利用数组的特性可以秒杀 。

甚至,在VBA里配合Split函数,一行代码就能把一句话切成数组:

Dim arr

arr = Split(“香蕉,苹果,大鸭梨”, “,”)  ‘ 瞬间得到一维数组

写在最后:做时间的朋友,做数组的朋友

兄弟们,现在的CPU都是八核十六线程,内存都是32G起步。但如果你还在用“单元格循环”,你的代码依然活在1995年。

数组,是VBA新手和老鸟的分水岭。

用了数组,你的代码会变快,你的发际线会变高,你下午喝咖啡的时间会变多。

今天的作业:去把你的代码翻出来,看到有.Value在循环里的,统统改成数组操作。如果你的代码运行时间从1分钟变成了1秒钟,记得回来在评论区还个愿。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 看完这篇Excel VBA数组攻略,我的8848钛金手机终于不卡了

猜你喜欢

  • 暂无文章