❶ Excel vba运行太慢,怎么提速
我看出问题了,数据多的时候,隐藏的操作会很慢。加快速度有两个途径:
第一个简单点,for i=11 ti h的循环不要检查cells,而是先把第5列内容存放在数组里面,在数组里面检查是否应当隐藏。进行隐藏的算法也优化了一点,就是先根据是否相等判断出是否隐藏到变量x里面,然后检测那一行的状态是否与x相同,不同才处理,减少处理次数。优化后的代码如下:
OptionExplicit
PrivateSubWorksheet_Change(ByValTargetAsRange)
Dims,h,i,arr,x
IfTarget.Address=Range("P5").AddressThen
s=Range("P5").Value
h=UsedRange.Rows.Count
If(Trim(s)="全部"OrTrim(s)="")Then
Rows("10:"&h).Hidden=False
Else
Application.ScreenUpdating=False
arr=Range(Cells(1,5),Cells(h,5))
Fori=11Toh
x=arr(i,1)<>s
IfRows(i).Hidden<>xThenRows(i).Hidden=x
Next
Application.ScreenUpdating=True
EndIf
EndIf
EndSub
上面的代码通过从数组里面判断,减少了取数时间,隐藏/显示行之前先检测一下状态,减少处理时间,应该有一定的效果。
代码还可以进一步优化,逐行扫描去隐藏和显示的操作仍然非常耗时,进一步优化的思路就是一块一块的进行处理,例如在数万行中筛选出需要显示的只有几行(极端就是一行)而其它都要显示的时候,最最佳状态下只需要执行三次:前面一段隐藏、中间一段显示、后面一段隐藏,能把上万次的表格界面操作缩小到三次,效果会大大加强。但是代码会很长、很复杂,要用一系列变量记录判断的当前行应该隐藏还是显示,但不立即处理,继续判断下一行;如果需要的处理和前面的相同,就记录需要处理的范围,继续下一行判断;如果需要的处理和之前的不同,那就执行之前的操作,重新记录。
❷ Excel数据量太大,用VBA运算依然会耗时太久,运行很慢,该怎么办
给你个建议,把所有需要读写工作表的操作,用数组表达,尽量减少读写工作表的语句。
这样让更多的操作在内存中进行,而不是在硬盘上进行。这中间的差异是天壤之别。我原来写的一个提取内容的sub,提取一个填写一个,总用时2分40秒。
然后我把要提取的东西全都赋值给数组,完事以后一次填写一行,或者完事后一下填写完,
结果只用了7秒。
❸ 各位大侠我是菜鸟,刚学VBA。写的这个代码处理速度太慢了,各位大侠有更快处理速度的写法吗,帮我优化下
没贴出代码,如果为你修改,简单说一下方法:使用数组。
VBA读写单元格的时候,无论是RANGE还是CELLS都很慢,读写一个单元格非常耗时,解决的办法是定义一个数组,一次性把整块(甚至是满表)读入到数组中,修改完毕之后,再一次性写回表里面去,这样能成千上万倍的提高速度。
白天上班忙,下面写一个对3行、1万列数据进行简单运算A3=A1+A2的例子给你看看,希望你能明白。
慢速代码:
for j=1 to 10000
cells(3,j)=cells(1,j)+cells(2,j)
next j
快速代码:
arr=activesheet.usedrange
for j=1 to ubound(arr,2)
arr(3,j)=arr(1,j)+arr(2,j)
next j
activesheet.usedrange=arr
如果不相信,可以测试感受一下。
❹ VBA程序运行太慢怎么解决
首先你的数据量比较大,慢一点也正常,不过设计程序的思路稍微改一下:
1、你采用的是先复制再筛选最后删除,可以改为在网盘上筛选出自己要的数据,读取到数组中,然后写入到表内。
2、判断符合条件的行整行的删除,其实在第一步就能合并解决。
这样运行速度会比你的快一些。
❺ EXCEL如何用VBA自动获取每个股票近几天的涨幅
excel大量获取数据是比较慢的 你这种得用vb写dll多线程刷新数据才行 私聊
❻ VBA统计速度太慢怎么办
excel综合统计速度确实不是很快,尤其多列多条件,循环太多,根据你说的数据,循环次数大概在一亿多,加上反复读表,导致速度慢,用access可以很好的解决。
❼ VBA代码运行太慢,求优化代码提升速度,谢谢!
第一句话
If Sheets("支持度").Cells(4, i) Like Sheets("查询表过度表").Cells(2, 1) Then
cells(4,i),i 所在的位置表示列,你的循环从1到400,相当于有400列?
您的总循环次数是400 * 400 * 400 = 64000000 次,其中由于if的逻辑,可能有部分循环没有发生,但就算是1万次的循环都是很慢的了。VBA本来就是慢的。
如果确实要榨出一点汁来,也不是没有。
比如 Sheets("查询表过度表").Cells(2, 1) 这个对象是没有变量的,所以可以先在一开始定义一个变量,直接获取单元格的值,以后在大循环中直接使用变量,就会快一点了。
又如,Sheets("查询表过度表").Cells(x, 2),这个,可以在for x语句下就用一个变量获取出来,后面的p循环时就用变量。
❽ vba程序从excel表格读取数据(数据量=2000行),程序运行时特别慢,怎么解决
给原数据减肥,可能原数据有大量的公式,或者其他对象图形。
❾ Excel vba运行太慢怎么提速运行的快些
优化后代码的文本如下,有可能排版会乱,建议结合上图阅读。
Dim arr1, arr2, i, j '定义两个数组
arr1 = Sheet1.UsedRange.Resize(, 1) '一次性提取表1数据A列
arr2 = sheet2.UsedRange.Resize(, 1) '一次性提取表2数据A列
Sheet1.UsedRange.Resize(, 1).Interior.Color = xlNone '所有已经使用空间的第一列
For i = 1 To UBound(arr1) '对表1A列所有数据进行检查
If arr1(i, 1) <> "" Then '如果它非空
For j = 1 To UBound(arr2) '查看是否包含表2A列的某一行
If InStr(arr1(i, 1), arr2(j, 1)) Then
Sheet1.Cells(i, 1).Interior.Color = 10000 '这个语句仍然影响速度
Exit For '一旦标记就不再继续扫描表2
End If
Next j
End If
Next i
❿ excel vba 从一个工作表提取符合条件的数据到另一个工作表太慢,如何提速
将原始数据存入数组再进行比较处理,将满足条件的数据也先存入数组,最后一次性放进单元格中,这样就很快了。