优秀的编程知识分享平台

网站首页 > 技术文章 正文

VBA经典应用69例应用9:在程序中使用ReDim语句

nanyue 2025-09-21 20:28:19 技术文章 2 ℃

一张员工信息表,行数每天疯涨到3万行。

手动复制粘贴的同事还在熬夜加班,隔壁老罗十秒就删干净无效行。

我问他怎么做到的,他只是轻描淡写一句:“用ReDim啊,动态数组一秒扩容。

”就这么点两个字,把熬夜和崩溃一并解决了。

先说结论:不会ReDim,VBA白学一半。

很多人第一次写Sub,上来就Dim arr(1000) 装死了长度。

结果今天10条记录,明天10000条,后天干脆崩溃。

ReDim就是那只橡皮筋,随时拉长,也随时缩回。

举两个最接地气的场景:

1 临时抓取某列的唯一姓名

先声明空壳子Dim names() As String

行数不确定?

用WorksheetFunction.CountA先算个数 n

一句ReDim names(n - 1)搞定长度,再循环塞值,MsgBox Join(names, " |")刷地一下列出来,看爽了。

2 Excel里拆分成多个工作表后,还要再加一张表

先装第一批数据,数组填得满满。

老板说再加一季度的——

别哭,ReDim Preserve names(UBound(names) + 10)

老值一个不掉,容量一次到位,复制粘贴从此退休。

注意,Preserve只能动最后一维。

多维数组要是顺手写成ReDim Preserve arr(10, 20 to40),IDE当场翻脸。

小技巧:把需要经常增删的那一维放最后,省得重写整个结构。

内存怪脾气也别忽视。

Redim一次,内存就重画一次,循环里连着刷几千次,电脑风扇会像吹风机。

经验法则:

– 先把上限算大一点,一次红冲到位;

– 真不行,分段ReDim;

– 最后再Erase arr,省得内存里留垃圾。

有人问我:那干嘛不直接Collection?

Collection也能增删,但取数要Key或索引来回倒腾,写报表里一个数组顺手转Transpose往表里一贴,比Collection爽三条街。

老鸟偷懒,菜鸟省时,互不打扰。

结尾丢个真事儿

上周新入职的小妹写汇总功能,固定数组开成1000。系统突然导入1800条,当场溢出。

我递过去三行代码,她把上限改成动态,下班前去喝了一杯生椰拿铁。

她说:原来ReDim跟奶茶一样,加料还不涨价。

留言说说,你第一次踩到数组大小是多大的坑?

Tags:

最近发表
标签列表