JSA对大数据的处理能力好像很差,或者有没有其他快捷的方法

需要按条件删除需要的行。代码如下 function del(){ for(var r = 2; r <= Range("A2").End(xlDown).Row; r++){ if( Range("A"+r).Value2 < 18774842 || Range("A"+r).Value2 > 18887786){ Range("A"+r).EntireRow.Delete(); } } } 数据有938000多行,宏运行了1个小时左右还没执行完。 请教一下,有没有其他快捷的办法。
陕西省
浏览 980
收藏
2
分享
2 +1
6
+1
全部评论 6
 
覃欢
覃欢

@金山办公

看代码的写法一些常量数据可以提前算出来 Range("A2").End(xlDown).Row 在循环外提前计算 Range("A"+r).Value2 在if条件之前提前获取出来 再看看
· 广东省
回复
 
会飞的鱼
会飞的鱼

KVP函数专家、创作者俱乐部成员

这么大的数据量,用什么语音去逐行单元格删除单元格都会很慢,建议优化下代码 1、如果只处理数据,不考虑单元格格式,把数据一次写到数组,循环数组后再写入到单元格。 2、可以增加临时变量,记录要删除的单元格地址,连接到指定数量的单元格,批量删除。 3、关闭事件、屏幕刷新、公式计算设置手动。 4、使用筛选功能,筛选出要删除的数据后,定义可见单元格删除。
· 辽宁省
回复
 
拾光漫行
拾光漫行

WPS函数专家

没处理过这么大的数据。不过看你的需求感觉就普通的方法也能满足吧。就判断 然后筛选删除。 然后你这个代码感觉有缺陷 假设 2 3 4行,假设都满足, 首先执行删除2行 那么剩下的3行就变成了2行 4行变成了3行,但是走下一轮的时候r等于的3 删除的就是原4行的内容,而原3行并没有判断到
· 重庆
1
回复
拾光漫行
拾光漫行

WPS函数专家

然后我这边实验了下 大约940000的数据,平均1秒钟处理2个,假设94万都有问题,那么需要940000/2/60/60,约130小时,所以一个小时没处理完很正常,话说这么大的数据量可以考虑下其他方式 比如筛选复制粘贴等。或者用数据库啥的,数据量大了 无论是wps还是office等这种表格都会比较慢,可能office会好那么一点点,但是都比不过数据库。或者也可以试试python等
· 重庆
1
回复