Sub 分析()
rq = 2 '变量声明,表16起始基础变量
rw = 5 '变量声明,表2起始的基础变量
re = 0 '变量声明,给否定的基础变量
rt = 4 '变量声明,基数参照变量
Do Until Sheet16.Cells(rq, 3) = "" '开始进入循环判断,执行到空单元格跳出。
rq = rq + 1
rw = rw + 1
re = re + 1
rt = rt + 1
a = Sheet16.Cells(rq, 3) '获取表16(rq&3)单元格的值
pp = Cells(rt, 3) '获取表当前表(rq&3)单元格的值
oo = re
If a <> 1 And a <> pp Then '用于判断两个结果
Cells(rw, 3) = oo '如果表16中A3单元的值不等于表2中c5单元格的值并不能为1在表二A6单元格写入1
Else
Cells(rw, 3) = "●" '如果表16中A3单元的值不等于表2中c5单元格的值在表二A6单元格写入●
re = re - re '出现●符号后,否定变量RE重置为0
End If
Loop
End Sub
为什么说这代码慢,原因如下
本来使用=IF(data!B4="","",IF(COUNTIF(data!$C4:data!$H4,D$5),"●",IF(D6<>"●",D6+1,1)))
引用的DATA!就是表16,这表随时整页涮新,这种IF语句在5万多个单元格内使用。打开工作表后不不用等待,刷新也即刻完成!
以上VBA本人初学自写,能达到最终结果,但运算太慢,要等待1分钟才能操作,DATA!工作表每天加入数据。
求高人指点!
计算慢的原因是:
你的Excel中存在的大量的公式,而你每次使用VBA语句像表中写入数据时Excel会自动重新计算公式的值,计算完毕后又会刷新屏幕。虽然Excel的公式计算速度很快,但刷新屏幕也会耗时,你写入1000个数据就等于Excel中的公式重新计算1000次+刷新1000次屏幕。速度自然慢了。
解决方法(基于Excel2007或以上版本),代码更改如下:
Sub 分析()如果是Excel2003版,由于不支持Application.Calculation属性(我只是从帮助文件看到,没有亲自验证,个人觉得应该有等同的方法),可以在Excel工具→选项里将计算模式改为手动,代码执行完后按F9或者再把计算模式改回来。
已经发到给您,请查收,帮忙改一下,谢谢
拿data表中循环指定的单元格值到表“趋势图的进行运算分析”
按条件判断显示如下表:
在VB界面单步调试正常,
用VBA循环计算了1550个,(只计算了一列,共33列)
而用函数计算同时计算5万多个,反而比VBA代码快,不明白这点?
是不是我使用的代码不合适?
我第一句就解释了,主要是你想要啥样的结果,宏可以自动完成不断的变化,函数只能变一次。
宏的运行速度比函数慢,但是提供了更多的功能,所以慢一些是肯定的。
你的语句没有问题,加上我写的前一句,可以加速。我用的是Excel2003