网站首页 > 技术文章 正文
一张员工信息表,行数每天疯涨到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跟奶茶一样,加料还不涨价。
留言说说,你第一次踩到数组大小是多大的坑?
猜你喜欢
- 2025-09-21 批量提取文件名到Excel操作手册,文件提取文件名到Excel的方法
- 2025-09-21 VBS脚本,将工作表名称动态化为当前月份
- 2025-09-21 Excel:拆分工作表_Excel拆分工作表代码
- 2024-08-06 [R语言] WGCNA入门教程(r语言基础入门教程)
- 2024-08-06 Auto CAD 常用系统变量、命令及技巧
- 2024-08-06 咕吧陪你学:excel VBA中的枚举enum以及数组你了解吗?速上车!
- 2024-08-06 VBA处理的数据:变量、常量、数组、集合、字典与对象属性
- 2024-08-06 Excel居然会自动写公式、写VBA代码,再也不用傻傻的去记了,真爽
- 2024-08-06 VBA|批量删除打开的工作簿中各工作表的名称Name
- 2024-08-06 教程|在Julia编程中实现GPU加速(gpu加速numpy)
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)