Excel VBA程式設計中提高效率的一些建議

2021-05-02 17:43:41 字數 1984 閱讀 2882

excel vba程式設計中提高效率的一些建議

首先,效率的提高應該建立在正確的解決方案和正確的演算法的基礎上,前者保證了結果的正確性,後者保證了效率。通過改進演算法和思路得到的支行效率的提高是以下優化方法的十倍百倍,因此,優化首先應該考慮的是演算法,其次才是本文以下提到的方法。要特別指出,效率的優化必須是針對關鍵**的優化,對於一些在程式執行過程中,只執行很少次數的**,沒有必須犧牲可讀性而進行優化。在些基礎上,可以通過注意以下一些問題,提高程式的執行效率。

應該盡量使用excel的內建函式,使用excel內建函式不僅可以提高執行效率,而且可以節省**數量。對於excel內建函式可以通過以下方式訪問:

例如以下求平均值的例子,使用的vba**如下:

而下面**程式比上面例子快得多:

在vba**中,應該儘量減少使用物件引用,尤其在迴圈中。每乙個excel物件的屬性、方法的呼叫都需要通過com介面的乙個或多個呼叫,這些com呼叫都是比較費時的,因此,減少使用物件引用能加快vba**的執行。可以通過以下途徑改進效率:

(1)使用with語句

例如以下語句,可以通過替換為with語句,提高執行效率:

對應的with語句:

(2)使用物件變數

如果乙個物件引用被多次使用,則可以通過定義乙個區域性變數,將此物件用set設定為物件變數,以減少對物件的訪問。如:

則以下**要比上面的要快:

(3)減少迴圈中的物件訪問

例如以下迴圈,可以通過設定區域性變數或者使用with語句來提高效率。

則以下**經上面的要快(使用with語句):

vba程式設計中對excel物件的引用是不可避免的,而且是經常性的工作,例如對range物件的引用,但同時這種引用又是非常耗時的,例如與使用陣列相比較,使用range物件要慢1000倍到10000倍,因此,一定要避免頻繁引用range物件(例如在一些資訊查詢、矩陣運算等時候),必要的時候,可以通過陣列等方式來替代,在運算開始前將range的資料讀入陣列,運算完成後再寫入range。

3.減少物件的啟用和選擇

通過錄製巨集得到的vba**充滿了物件的啟用和選擇,例如workbooks(***).activate、sheets(***).select、range(***).select等,但事實上大多數情況下這些操作不是必需的,因此,應該盡量避免這樣的**。例如:

可改為:

4.關閉螢幕更新

避免不斷的重新整理螢幕,在向工作薄寫資料或者繪圖時,鎖定螢幕重新整理;

如果你的vba程式需要經常更新螢幕工作表的內容,則關閉螢幕更新是提高vba程式執行速度的最有效的方法,可以縮短執行時間2/3左右。關閉螢幕更新的方法:

請不要忘記vba程式執行結束時再將該值設回來:

5.提高關鍵**的效率

最後要特別指出,不要做不必要的優化。雖然本文給出了很多不同方法執行效率的差異,但千萬不要因為追求效率而損失了**的可讀性、清晰性。效率的優化必須是針對關鍵**的優化,對於一些在程式執行過程中,只執行很少次數的**,沒有必要犧牲可讀性而進行優化。

對於**執行效率,千萬不要人云亦云,必要時候,自己動手測試一下,結果往往會出乎意料。

6.**執行時間的測算

vba和vb中,沒有專門的**執行事件測算工具和方法,筆者一般是使用timer函式,其返回值是乙個single型別的數值,代表從午夜到現在經過的秒數,此數值包括小數部分,但精確程式在windows nt,2000t xp下大概接近10ms。如果要測試一段**的執行速度,可以使用如下方法:

過程measuertime可以測試乙個過程的執行速度,因為一般乙個過程執行會很快,所以使用迴圈,執行n次(第8行設定),在第12行呼叫測試的過程,通過迴圈前的時間(第9行)和迴圈後的時間(第15行),計算總共執行時間(第17行)。

使用這個方法,就可以做一些測試,看哪些方法執行效率更高。另外,由windows的多工特性,測試時最好關閉其它無關程式,以獲得最測試結果。

如何提高效率

如果問 你想不想使自己的收入加倍 我猜每個人的答案都是 yes 如果我繼續問 你相不相信現在你的收入會加倍 我想有一些人可能會沒把握,有一些人認為不太可能,我告訴各位 你們每個人的收入一定會加 倍 因為按照每年物價增長率及通貨膨脹的正常速度,20年後你的收入一定會加倍。但是如果你希望,提前在5年內 ...

Python 提高效率

最近師兄給了小任務,算乙個p值。任務詳情是這樣的 第一步,有基因集a,23個元素,基因集b,451個元素,共有23 451 9922個組合 當然你要考慮去重 看在ppi資料庫 145萬多行資料 中出現的組合總個數 觀察值 第二步,然後再以hg19中基因為背景基因集,放回隨機抽取23個基因構成基因集c...

如何提高效率

在提高班學習有很長的一段時間了,學習的收穫中有一點是非常的明顯,那就是自己的效率明顯的比原來高出許多,現在就按照自己的切身體會來總結一下如何提高自己效率.1 目標 必須要有目標,沒有目標和方向效率會大大的折扣.當然不僅僅是學習,更是生活,事業,和人的整個一生.這點公尺老師非常的重視,每個學習階段都給...