Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: sunjing-zxl

[分享] Excel VBA代码高效编写技巧

[复制链接]
 楼主| 发表于 2011-4-19 09:19 | 显示全部楼层
本帖最后由 sunjing-zxl 于 2011-4-19 09:19 编辑

  • 使用已有的VBA方法
    也有一些特定目的的VBA方法,它们提供在单元格区域执行特定操作的一种简单的方式。例如工作表函数,这些特定的方法比使用通常的VBA编码完成相同的任务要更快。最常用的是”Replace”方法和”Find”方法。
    Replace方法:
    下面的示例用了一种相当慢的方式代码改变单元格区域H1:H20000中每个单元格的值。

·
Sub NowDoThis1()
·
Dim Start As Double, Finish As Double
·
Start = Timer
·
'--------------------------------------
·
Dim Cell As Range
·
For Each Cell In Worksheets(1).Range("H1:H20000").Cells
·
If Cell.Value = 4 Then Cell.Value = 4.5
·
Next
·
'--------------------------------------
·
Finish = Timer
·
MsgBox "本次运行的时间是" & Finish - Start
End Sub
下面的示例使用Replace方法进行同样的操作,但运行得更快。
Sub NowDoThis2()
'快约两倍
Dim Start As Double, Finish As Double
Start = Timer
'--------------------------------------
Worksheets(1).Range("H1:H20000").Replace "4", "4.5"
'--------------------------------------
Finish = Timer
MsgBox "本次运行的时间是" & Finish - Start
End Sub
Find方法:
下面的代码使用一种相对较慢的方法在单元格区域I1:I5000中值为4的单元格内添加一个蓝色的椭圆。
Sub FindItSlow()
Dim Start As Double, Finish As Double
Start = Timer
'--------------------------------------
Dim Cell As Range
For Each Cell In Worksheets(1).Range("I1:I5000").Cells
If Cell.Value = 4 Then
With Worksheets(1).Ovals.Add(Cell.Left, _
Cell.Top, Cell.Width, _
Cell.Height)
.Interior.Pattern = xlNone
.Border.ColorIndex = 5
End With
End If
Next
'--------------------------------------
Finish = Timer
MsgBox "本次运行的时间是" & Finish - Start
End Sub
下面的示例使用了Find方法和FindNext方法执行相同的任务,但运行速度更快。
Sub FindItFaster()
'快约25
Dim Start As Double, Finish As Double
Start = Timer
'--------------------------------------
Dim Cell As Range, FirstAddress As String
With Worksheets(1).Range("I1:I5000")
Set Cell = .Find(4)
If Not Cell Is Nothing Then
FirstAddress = Cell.Address
Do
With Worksheets(1).Ovals.Add(Cell.Left, _
Cell.Top, Cell.Width, _
Cell.Height)
.Interior.Pattern = xlNone
.Border.ColorIndex = 5
End With
Set Cell = .FindNext(Cell)
Loop Until Cell Is Nothing Or Cell.Address = FirstAddress
End If
End With
'--------------------------------------
Finish = Timer
MsgBox "本次运行的时间是" & Finish - Start
End Sub
关于带有特定目的的VBA方法的更多的信息,您可参见VBA帮助系统相关主题。
结语
当然,代码优化可能不是绝对必要的,这依赖于您要做的工作……如果您正好编写了一个快速且简短的或者是一次性使用且与速度和/或简洁要求无关的代码,您就不需要优化代码。
但另一方面,如果您处理一个带有很多数据、工作簿、工作表等大的工程,再次检查您第一次编写好的代码,看看是否您的代码需要优化,而这样做总是值得的。
最终,您将养成编写代码的好习惯,将会使您的代码更简洁、运行更快速、并且容易为您自已和他人阅读和调试。同时,由于您的代码简洁,因而输入更快,工作效率更高。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2011-4-19 14:14 | 显示全部楼层
回复

使用道具 举报

发表于 2011-4-19 14:20 | 显示全部楼层
回复

使用道具 举报

发表于 2011-12-13 23:38 | 显示全部楼层
好贴就得顶,帮顶!
回复

使用道具 举报

发表于 2012-1-16 12:49 | 显示全部楼层
好贴就得顶,帮顶!
回复

使用道具 举报

发表于 2012-2-9 18:31 | 显示全部楼层
先收起来,再好好学学!
回复

使用道具 举报

发表于 2012-9-8 09:43 | 显示全部楼层
学习学习学习下载信息
回复

使用道具 举报

发表于 2012-9-8 09:50 | 显示全部楼层
下载学习         
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-31 22:36 , Processed in 0.300983 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表