日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

VBA編程時(shí)常用的提速方法 >> VBA基礎(chǔ) >> Excel吧

 hanzinu 2011-05-02

VBA編程時(shí)常用的提速方法作者:網(wǎng)絡(luò) | 來(lái)源:網(wǎng)絡(luò)轉(zhuǎn)摘 | 時(shí)間:2008-05-07 | 閱讀權(quán)限:游客 | 會(huì)員幣:0 | 【大 中 小】
速度是程序設(shè)計(jì)永恒的熱門(mén)話題,使用VBA編程當(dāng)然也不例外,這里就將在網(wǎng)上收集到的VBA編程常用提速的方法與自己在VBA編程時(shí)的心得整理一下,上傳到這里.

一、讓代碼"專(zhuān)注"運(yùn)行
1.將Application.ScreenUpdating設(shè)定為False,關(guān)閉屏幕更新.這個(gè)是最基本的加速方法,在程序結(jié)束設(shè)還原時(shí)設(shè)定為T(mén)rue.
2.將Application.EnableEvents設(shè)定為False,禁止觸發(fā)事件.這個(gè)在有其它自定義事件時(shí),如定義了Worksheet_Change時(shí),就有需要設(shè)定,還原時(shí)設(shè)定為T(mén)rue.
3.將Application.Interactive設(shè)定為False,禁止交互模式.當(dāng)我們運(yùn)行程序時(shí),如刪除有數(shù)據(jù)的工作表而不需要提示,這時(shí)就可以使用,見(jiàn)意這段代碼只加在需要的地方,之后就立即開(kāi)啟.
4.將Application.Calculation設(shè)定為xlCalculationManual,將計(jì)算模式設(shè)定為手動(dòng).當(dāng)工作簿中有大量公式時(shí),這樣的設(shè)定提速特別明顯,還原時(shí)設(shè)定為xlCalculationAutomatic.

二、單元格(區(qū)域)寫(xiě)法的選擇
單元格(區(qū)域)寫(xiě)法有3種,以A1單元格為例,可以使用
1.Cell對(duì)象寫(xiě)法:cells(1,1)
2.Range對(duì)象寫(xiě)法:Range("A1")
3.名稱(chēng)寫(xiě)法:[A1]

三種寫(xiě)法各有優(yōu)缺點(diǎn),但以取值速度論,cells(1,1)最快,[A1]寫(xiě)法最慢,Range("A1")比cells(1,1)稍慢,但優(yōu)點(diǎn)是在VBE中輸入可以顯示屬性方法等快速輸入信息.此外,要明示對(duì)象屬性而不要依賴(lài)于對(duì)象的默認(rèn)屬性,這是一種好的編程習(xí)慣.下面兩句,第二句要比第一句快得多:
x= cells(1,1)
x= cells(1,1).value

三、比較語(yǔ)句

1.分解IF語(yǔ)句
如:
IF A THEN
IF B THEN

優(yōu)于

IF A AND B THEN


IF A THEN
...
ELSE IF B THEN
優(yōu)于
IF A OR B then

2.并列的條件使用elseif或select,elseif寫(xiě)起來(lái)麻煩,但速度優(yōu)于select

3.將最可能的條件及容易計(jì)算的條件放在前面

上面分解后的A應(yīng)當(dāng)比B出現(xiàn)的機(jī)會(huì)更大,或者需要進(jìn)行計(jì)算更容易計(jì)算出結(jié)果,select語(yǔ)句放在前面的case也應(yīng)這樣

4.Iif速度慢于if/else

四、循環(huán)語(yǔ)句

1.For 語(yǔ)句快于DO/WHILE,這是因?yàn)镕OR語(yǔ)句的增量部分是VBA自帶的,特別是步長(zhǎng)為1的更明顯

2.For/each快于for/to

五、使用With語(yǔ)句

with語(yǔ)句不僅僅是簡(jiǎn)化了寫(xiě)法,速度也大大提升了。

六、盡量不用Variant類(lèi)型

這不用多說(shuō)吧,使用Option Explicit是一個(gè)好習(xí)慣。

給返回值一個(gè)明確的類(lèi)型,會(huì)對(duì)提速有好處。雖然有時(shí)候我們覺(jué)得不明顯,這是很多人使用left$,而不用left,使用int%,而不用int的原因(你是否對(duì)這種寫(xiě)法好奇過(guò)?)。但如果你一開(kāi)始你就沒(méi)有DIM,這就很有必要了。

七、關(guān)注內(nèi)存

對(duì)占用內(nèi)存較多的對(duì)象變量,不要時(shí)要記住set=nothing,如果你對(duì)你的機(jī)器內(nèi)存的容量沒(méi)有信心,應(yīng)避免使用遞歸程序,遞歸的過(guò)程會(huì)吃掉大量的內(nèi)存。

八、使用工作表函數(shù)(方法)

有些工作表函數(shù)(方法)速度是很快的,比如FIND,VLOOKUP等,要記得使用它們,不要花力氣去做不討好的事。當(dāng)使用工作表函數(shù)時(shí),操作對(duì)象應(yīng)避免使用內(nèi)存變量,那樣反而慢。

九、劃零為整
當(dāng)需要對(duì)較大區(qū)域進(jìn)行相同的操作時(shí),可以先使用union等方法收集,一次進(jìn)行。在Range對(duì)象上尤其明顯,內(nèi)容、格式變更,刪除等等一個(gè)一個(gè)的處理要比把這些選定后一起處理慢得多的多。
 
十、使用內(nèi)存數(shù)組

1.內(nèi)存變量的運(yùn)算速度大大快于RANGE對(duì)象。
1)將RANGE數(shù)據(jù)寫(xiě)入內(nèi)存數(shù)組。下面兩句將生成一個(gè)65536行,6列的數(shù)組。用這種方法產(chǎn)生的數(shù)組都是兩維數(shù)組,即使引用的RANGE只有一行或一列。下標(biāo)始于1,不受option base設(shè)置的影響。arr必需聲明為Variant類(lèi)型。

Dim arr()
arr=range(“A1:F65536”)

2)將內(nèi)存數(shù)組數(shù)據(jù)寫(xiě)入RANGE。在內(nèi)存數(shù)組經(jīng)過(guò)計(jì)算處理后,寫(xiě)回時(shí)只需下句就可以了。

range(“A1:F65536”)= arr

2.非數(shù)組變量快于數(shù)組變量。當(dāng)數(shù)組很大時(shí),根據(jù)下標(biāo)提取數(shù)值會(huì)比從單個(gè)變量慢得多,這時(shí)可以把需要多

次使用的數(shù)組值先賦給內(nèi)存變量。

3.減少使用REDIM的次數(shù)。REDIM是對(duì)數(shù)組操作中最費(fèi)時(shí)的動(dòng)作??梢韵阮A(yù)算大小,不夠或多余時(shí)再進(jìn)行調(diào)整。

轉(zhuǎn)載請(qǐng)注明:本文來(lái)自:Excel吧 (www.) 詳細(xì)出處參考:http://www./Art/Html/264.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多