LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

别再用循环读取 Excel 单元格数据了!这一行Range代码,让你的 VBA 速度提升 100 倍!

admin
2026年1月18日 16:15 本文热度 28

【导读】

曾几何时,写个 VBA 宏处理几万行数据,运行之后,Excel 直接进入未响应模式,只能盯着转圈圈的鼠标发呆?其实,代码之所以龟速,可能不是电脑配置不行,而是因为原始的蚂蚁搬家读取法。


1 职场真实扎心瞬间

在办公自动化中,Excel VBA 是很多人的效率神兵。但不少人在处理大数据量时,常写的逻辑如下:

处理 5 万行数据,那就写个 For 循环,从第 1 行读到第 50000 行,逐个处理吧。」

停!快住手!

该写法的本质是让 VBA 频繁地Excel 单元格的门。敲一次就消耗一次系统资源。5 万行数据就要敲 5 万次门。这好比要搬 5 万块砖,明明有一辆卡车,却偏要一只手拿一块,跑 5 万趟!


2 错误示范:传统的“蜗牛式”循环

来看看这种等到心碎的代码:

' 典型的低效写法Dim arr() As StringDim i As LongDim lastRow As LonglastRow = Cells(Rows.Count, 1).End(xlUp).Row
ReDim arr(1 To lastRow)
' 开始蚂蚁搬家For i = 1 To lastRow arr(i) = Cells(i, 1).Value ' 每一行都要访问一次工作表,慢得惊人Next i

该写法在处理几百行数据时可能没感觉,但一旦数据量上万,等待的时间在茶水间冲三回咖啡都不止。


3 高效姿势:一行代码,瞬移读取

不用敲这 5 万次门,应该直接把整片区域打包带走

VBA 提供了一个强大的特性:直接将 Range 赋值给 Variant 变量。这样,整片单元格的数据会瞬间在内存生成一个二维数组。

' 瞬间起飞的写法Dim data As Variant ' 必须定义为 VariantDim lastRow As LonglastRow = Cells(Rows.Count, 1).End(xlUp).Row
' 一行代码,整张表数据直接装入内存data = Range("A1:F" & lastRow).Value

为何这么快?因为它避开了 Excel 界面与 VBA 引擎之间繁琐的通信。它不是在读单元格,而是在镜像内存。实测此法比逐个循环读取速度跃升100 倍以上


4 进阶技巧:如何找到最精准」的最后一行?

UsedRange可获取范围,但UsedRange往往包含被删内容的空格式单元格,导致数组里多出几千行空数据。

推荐使用这更硬核的Find定位法,这能精准锁定有实质内容的最后一行:

Dim lastRow As LonglastRow = Cells.Find(What:="*", _ After:=Cells(11), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row


5 总结:效率是职场的护城河

效率的时代,更应该用最简洁的代码实现最高效执行

  • 避坑:永远不要在循环里频繁读写单元格。

  • 原则:一次读入数组,在数组里处理完,再一次过写回 Excel。

  • 结果:别人在等 Excel 恢复响应,你从容地准备下班。


阅读原文:原文链接


该文章在 2026/1/19 10:51:51 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved