01
寫在前面
占用計算時間的不是公式數(shù)量或工作簿大小进泼。而是單元格引用和計算操作的數(shù)量以及正在使用的函數(shù)的效率。
因為大多數(shù)工作表都是通過復(fù)制同時包含絕對引用和相對引用的公式來構(gòu)造的急但,所以它們通常包含大量公式花墩,這些公式包含重復(fù)的或相同的計算和引用雳刺。
避免復(fù)雜的宏大公式和數(shù)組公式盔性。通常,最好增加行和列的數(shù)量劲妙,并減少復(fù)雜的計算湃鹊。這樣,Excel 中的智能重算和多線程計算都能有更好的機會來優(yōu)化計算是趴。
那么涛舍,加快工作簿的計算都有哪些規(guī)則可循呢?
02
刪除相同唆途、重復(fù)和不必要的計算
查找相同富雅、重復(fù)和不必要的計算,并確定 Excel 計算此障礙的結(jié)果大概需要多少個單元格引用和計算肛搬。然后没佑,考慮如何使用更少的引用和計算得出相同的結(jié)果。
這通常涉及到下述一個或多個步驟:
減少每個公式中的引用數(shù)温赔。
將重復(fù)的計算移動到一個或更多幫助器單元格中蛤奢,然后從原始公式引用幫助器單元格。
再使用一些行和列來計算和存儲一次中間結(jié)果,以便可在其他公式中重復(fù)使用它們啤贩。
03
盡可能使用最高效的函數(shù)
在找到涉及函數(shù)或數(shù)組公式的障礙時待秃,請確定能否使用更高效的方式獲得相同的結(jié)果。例如:
與在未排序的數(shù)據(jù)上進(jìn)行查找相比痹屹,在已排序的數(shù)據(jù)上查找可能快數(shù)十倍或數(shù)百倍章郁。
VBA 用戶定義的函數(shù)通常比 Excel 中的內(nèi)置函數(shù)慢(但精細(xì)編寫的 VBA 函數(shù)可能很快)。
盡量減少?SUM?和?SUMIF?等函數(shù)中所用單元格的數(shù)量志衍。計算時間與所用單元格的數(shù)量成正比(忽略未使用的單元格)暖庄。
請考慮將運行較慢的數(shù)組公式替換為用戶定義的函數(shù)。
04
充分利用智能重算和多線程計算
Excel 中的智能重算和多線程計算使用得越充分楼肪,每次 Excel 重算時要執(zhí)行的處理越少培廓,因此:
如果可以,請避免使用?INDIRECT?和?OFFSET?等可變函數(shù)春叫,除非它們的效率明顯優(yōu)于替代項肩钠。(經(jīng)過精心設(shè)計后使用?OFFSET?通常速度很快。)
盡量減少數(shù)組公式和函數(shù)中正在使用的區(qū)域的大小象缀。
將數(shù)組公式和宏大公式拆分到單獨的幫助程序列和行蔬将。
避免單線程函數(shù):
PHONETIC
CELL(使用“格式”或“地址”參數(shù)時)
INDIRECT
GETPIVOTDATA
CUBEMEMBER
CUBEVALUE
CUBEMEMBERPROPERTY
CUBESET
CUBERANKEDMEMBER
CUBEKPIMEMBER
CUBESETCOUNT
ADDRESS爷速,其中給定第 5 個參數(shù) (sheet_name)
引用數(shù)據(jù)透視表的任何數(shù)據(jù)庫函數(shù)(DSUM央星、DAVERAGE 等)
ERROR.TYPE
HYPERLINK
VBA 和 COM 加載項用戶定義的函數(shù)
避免迭代使用數(shù)據(jù)表和循環(huán)引用:這兩者均執(zhí)行單線程計算。
05
對每次更改進(jìn)行計時和測試
你所做的一些更改可能令你感到驚訝惫东,這可能是由于未得到你認(rèn)為應(yīng)得到的結(jié)果莉给,或者計算速度比預(yù)期的慢。因此廉沮,應(yīng)按如下方式對每次更改進(jìn)行計時和測試:
使用?RangeTimer?宏對要更改的公式進(jìn)行計時颓遏。
進(jìn)行更改。
通過使用?RangeTimer?宏對已更改的公式進(jìn)行計時滞时。
檢查已更改的公式是否仍得出正確答案叁幢。
06
示例
例一:即時更新總和
你需要計算一列包含 2,000 個數(shù)字的即時更新總和。假設(shè) A 列包含數(shù)字坪稽,B 和 C 列包含即時更新總和曼玩。
可使用?SUM(高效函數(shù))編寫公式(參考B列)
將公式向下復(fù)制到 B2000。
SUM?總共使用了多少單元格引用窒百?B1 引用一個單元格黍判,B2000 引用 2,000 個單元格。平均每個單元格是 1,000 個引用篙梢,因此總共是 200 萬個引用顷帖。如果選擇 2,000 個公式并使用?RangeTimer?宏,則顯示 B 列 2,000 個公式的計算用時為 80 毫秒。其中大部分計算都重復(fù)多次:B2:B2000 的每個公式都使用?SUM?A1:A2贬墩。
也可以使用(參考C列)
C1=A1 C2=C1+A2
將此公式向下復(fù)制到 C2000榴嗅。
現(xiàn)在總共使用了多少單元格引用?每個公式均使用兩個單元格引用(第一個公式除外)陶舞。因此录肯,總數(shù)為 1999*2+1=3999。這可減少 500 個單元格引用吊说。
RangeTimer?顯示 C 列 2,000 個公式的計算用時為 3.7 毫秒论咏,而 B 列的計算用時為 80 毫秒。這一改變的性能改進(jìn)系數(shù)僅為 80/3.7=22(而非 500)颁井,因為每個公式都有少量開銷厅贪。
麥斯貝思敬酒服新娘2020新款女酒紅色訂婚結(jié)婚回門小晚禮服連衣裙平時可穿大合唱團(tuán)演出服 酒紅色 XL
京東198.00購買
例二:錯誤處理
執(zhí)行大量計算的公式時如果在出現(xiàn)錯誤時結(jié)果顯示為零(在完全匹配查找中經(jīng)常遇到這種情況),則可以通過多種方式編寫它雅宾。
-
可以將它編寫為單個公式养涮,這樣運行速度很慢:
B1=IF(ISERROR(time expensive formula),0,time expensive formula)
-
可編寫成兩個公式(此方法較快):
A1=time expensive formula
B1=IF(ISERROR(A1),0,A1)
-
或者,可使用?IFERROR?函數(shù)眉抬,它運行速度快且簡單贯吓,還是單個公式:
B1=IFERROR(time expensive formula,0)
07
寫在最后
Excel 讓你能夠高效管理更大型的工作表,與早期版本相比蜀变,它還能大幅提升計算速度悄谐。創(chuàng)建大型工作表時,很容易就采用會導(dǎo)致計算緩慢的方式進(jìn)行構(gòu)建库北。計算緩慢的工作表會增加錯誤爬舰,因為用戶發(fā)現(xiàn)在執(zhí)行計算時很難進(jìn)行維護(hù)。
通過使用一組簡單的技術(shù)寒瓦,可將大部分計算緩慢的工作表提速 10 倍或 100 倍情屹。此外,你還可在設(shè)計和創(chuàng)建工作表時應(yīng)用這些技術(shù)來確保其快速計算