首页 > 编程语言 >VBA 47 程序优化与提速的方法

VBA 47 程序优化与提速的方法

时间:2022-12-30 02:11:06浏览次数:44  
标签:Dim VBA Sub 47 单元格 提速 Timer 循环 减少

一、减少对象的调用

二、减少计算次数

三、禁止闪屏

四、增加变量的声明类型

五、减少工作表函数的使用

六、减少VBA函数的使用

七、用静态数组替换动态

八、填充前先清空

九、批量替代个体

十、减少循环次数

十一、巧妙填充公式

 

 

一、减少对象的调用

调用对象是非常非常耗费资源的,所以一定要尽可能的少调用对象。包括:工作簿,工作表,单元格以及外引用对象。

下面两个程序的运行结果是一样的,但是在循环外的速度比循环中的速度快很多倍。

Sub 在循环中调用单元格()

Dim x As Integer
Dim k, t

t = Timer
For x = 1 To 20000
    k = [a1]
Next x

Debug.Print Timer - t


End Sub

 

Sub 在循环外调用单元格()

Dim x As Long, k, m
Dim t

t = Timer
m = [a1]
For x = 1 To 2000000
    k = m
Next x

Debug.Print Timer - t

End Sub

 

二、减少计算次数

程序的运算速度和计算次数有很大的关系,所以要尽可能的减少计算的次数。

能在循环外计算出结果的,就不要在循环内计算。

Sub 在循环中计算()
Dim a, b, c, x, t, k
t = Timer
a = 100
b = 2
c = 3

For x = 1 To 1000000
    k = a ^ b + c
Next x

Debug.Print Timer - t

End Sub

 

Sub 在循环外计算()
Dim a, b, c, x, t, k, m
t = Timer
a = 100
b = 2
c = 3

m = a ^ b + c
For x = 1 To 1000000
    k = m
Next x

Debug.Print Timer - t

End Sub

 

三、禁止闪屏

属性Application.ScreenUpdating = False时,可以禁止程序运行过程中的屏幕闪动,进而提高运行速度。

注意:只有对会引起闪屏操作的代码才有效,否则可能还会拖慢程序的速度。

什么情况下会引起闪屏?  操作单元格、工作表、工作簿会引起闪屏。

Application.ScreenUpdating = False

 

四、增加变量的声明类型

数组最需要声明类型,arr(1 to 6000, 1 to 3 ) as string

 

五、减少工作表函数的使用

调用工作表函数可以让代码更简洁,但速度却不理想。减少工作表函数的使用也是提升程序速度的方法之一。

下面两个都是工作表函数:

a = Application.WorksheetFunction.CountIf()
b = Application.WorksheetFunction.Index()

 

六、减少VBA函数的使用

七、用静态数组替换动态

八、填充前先清空

例如,填充单元格前先把单元格原先的内容给清空。

九、批量替代个体

十、减少循环次数

十一、巧妙填充公式

如果要输入公式的单元格是连续的,可以先在第一个单元格输入公式,其他单元格采用Filldown填充方式。

 

标签:Dim,VBA,Sub,47,单元格,提速,Timer,循环,减少
From: https://www.cnblogs.com/bravesunforever/p/17013933.html

相关文章

  • CF476B 1300
    题意输入#1++-+-+-+-+输出#11.000000000000输入#2+-+-+-??输出#20.500000000000输入#3+++??-输出#30.000000000000解析我是找规律做的。算出最后......
  • VBA 43 日期与时间计算
    计算时间差'计算时间差Subtest2()Dimt,x,st=TimerDebug.PrinttForx=1To900000s=s+xNextxDebug.PrintTimer-tEndSub DateDif......
  • VBA 42 数据类型与转换
    注意:使用VBA.TypeName()判断单元格内容的数据类型时,单元格一定要使用value属性。(切记切记,否则返回的类型是Range)判断是否为空VBA.IsEmpty()VBA.TypeName() 判断是......
  • word vba 操作表格, 设置表格的样式
    一、新建和删除表格样式Sub表格样式()DimoldstyleAsStyle,tablestyleAsStyle'OnErrorResumeNext'删除表格样式'ActiveDocument.Styles("mytablestyl......
  • 47.DRF实现分页
    分页Pagination  当我们在PC或者App有大量数据需要展示时,可以对数据进行分页展示。这时就用到了分页功能,分页使得数据更好的展示给用户 比如我们有1W+数据要返回......
  • word vba 操作表格, 设置表格中的段落
    一、表格中的段落设置Sub表格中的段落设置()DimpAsParagraphForEachpInActiveDocument.ParagraphsIfp.Range.Information(wdWithInTable)Then'针对......
  • 利用VBA字典实现单条件,结果多值查询
    来源:利用VBA字典实现单条件,结果多值查询-知乎(zhihu.com)很好的利用字典数据类型 利用VBA字典实现单条件,结果多值查询VBA语言专业教育分享成果,随喜......
  • vba-match和错误处理
    本文是讲match函数的踩坑点,大家注意避坑。1、MATCH函数只在一维数组或者二维一列数组中才有效。如图:A2为二维数组,A3为一维数组,A4为二维一列数组。B运算结果为Error20......
  • vba-多列同时查找满足条件的行号
    我首先想到的非环版本要做到这一点(循环简单得多),是使用匹配(),但如果你有多个值使用A=Q或同日在那里,你可能会遇到一个问题。Dimi,jasIntegeri=Application.Match(RefC......
  • RT-thread系统ADC无法正确读取内部温度,基准和VBAT通道数据的问题原因
    原因是通道号对应到实际hal库中的通道名不正确STM32L431芯片中内部VREFIN通道是0,如果直接使用0号通道去读取将获取错误的adc值,需要修改drv_adc.c中的stm32_adc_get_chan......