跳到主要內容跳到頁尾

試算表為什麼越來越慢:從重算的原理找出拖慢的地方

6 分鐘閱讀Lv.0 初學者摘要與日期

用重算的原理說明試算表變慢的五個常見原因:揮發性函式、整欄範圍、重複計算、IMPORTRANGE 條數與條件式格式,並給一個由容易查到難查的排查順序。

發布 更新

文章目錄

剛建好的試算表,打開一下子就好,改一格也是瞬間。半年後,每輸入一個數字都要等它轉一下,你卻說不出是哪天開始變慢的。

這篇不教優化技巧,只講試算表為什麼會慢,讓你下次變慢時知道先看哪裡。改了計算設定(手動計算、重新計算頻率)會換來什麼、失去什麼,放在 Google 試算表「計算」設定頁導覽。

改一格,Sheets 會重算什麼

先想像一份茶飲店的訂單表。你把價目表裡的單價改掉,用到單價的小計跟著變,小計加起來的報表總計也跟著變。Sheets 記得「誰引用了誰」,所以只會重算被牽動的那一條線,下圖上排就是這樣。

上排是一般公式,只有引用到被改格子的公式會重算;下排是含 TODAY 的格子,每次重算都再算一次並牽動用到它的公式← 左右滑動看完整的圖,點圖可放大

圖:上排只動被牽動的公式,下排那格不管你改哪裡都會被算一次。

下排是揮發性函式(volatile function,意思是「結果隨時可能變」的函式)。NOW、TODAY、RAND、RANDBETWEEN 每次重算結果都可能不同,所以 Sheets 每次重算都得把它們再算一遍,用到它們的公式也跟著算。官方說明舉的例子就是這四個,用的是「例如」,沒有給完整清單。網路上常把 INDIRECT、OFFSET 也列進來,官方沒有這樣寫,這篇不下結論。

重算的時機可以調,在「檔案」>「設定」的「計算」分頁。

慢的來源,先分成三個問題

我把一次重算想成三件事:公式有幾條、每條要讀多少格,再加上有沒有要去別的檔案拿資料。

公式有幾條乘以每條讀多少格,再加上跨檔讀取,合起來是一次重算的工作量← 左右滑動看完整的圖,點圖可放大

圖:五個常見原因都落在這三個問題裡,哪個變大,一次重算的工作量就跟著變大。

下面照這三個問題一個一個看。

公式有幾條

最常見的是同一個查找寫在很多欄。舉例來說,訂單在 A:B 欄,價目表在 G:H 欄:

品項杯數
蘋果紅茶7
青茶12
烏龍3
品項單價
蘋果紅茶45
青茶38
烏龍42

我想要小計和打九折後的價錢,一開始很容易兩欄各寫一次查單價。C2 是小計:

Google 試算表公式
fx

小計,查一次單價

=B2*VLOOKUP(A2,$G$2:$H$4,2,FALSE)

D2 是折後價,又查了一次:

Google 試算表公式
fx

折後價,再查一次單價

=B2*VLOOKUP(A2,$G$2:$H$4,2,FALSE)*0.9

每一列要查 2 次。改成先把單價查出來放一欄,後面的欄位都引用它,每列就只查 1 次:

欄位公式
C2 單價
D2 小計
E2 折後價

來看看結果:

品項杯數單價小計折後價
蘋果紅茶745315283.5
青茶1238456410.4
烏龍342126113.4

3 列看不出差別,不過同一個查找貼在幾千列、又被好幾欄重複,差距就會被放大。這種「先算一次、後面都引用」的做法,放在三層架構的計算層最自然,呈現層只引用結果,見 三層架構入門。

揮發性函式也是同一個道理。如果每一列都寫一個 來算天數,不如在一格放 ,其他公式都引用那一格。這樣揮發性函式只出現一次,哪些公式被它牽動也一目了然。被牽動的公式還是會跟著重算,所以我會盡量少讓大量公式依賴它。

每條讀多少格

整欄範圍(例如 A:A)常被當成元凶,我沒有量過整欄和固定範圍的差距,所以不拿它下結論。我的理解是公式讀的是工作表實際有的那些列,新工作表預設 1,000 列,資料拉長才跟著變多。

比較值得留意的是兩件事。一是工作表被拉得很長,有一大段用不到的空白列,整欄公式和條件式格式的範圍也跟著長。二是整欄寫進很多條公式,每一條都在讀那一欄。我個人的做法:會一直新增資料的表,我還是用整欄或開放式範圍(例如 A2:A),因為固定寫成 A2:A100,之後忘了改,算錯比慢更麻煩。用不到的空白列和欄,就選起來刪掉。

條件式格式也是這一類。每條規則要對它套用範圍裡的每一格判斷,負擔大約是規則數乘上範圍大小。常見狀況是複製貼上之後,同一個條件被拆成十幾條規則,各自套在一小段上。到「格式」>「條件式格式」看右側的規則列表就知道了,合併成一條、範圍只框資料真正有的地方。設定方式在 條件式格式。

要不要跨檔

每一條 IMPORTRANGE 都要去讀另一份試算表,條數越多,這份檔案要等的外部資料就越多。我的做法跟 IMPORTRANGE 那篇一樣:一份來源檔只匯一次,放進專門的匯入分頁,其他公式再從那一頁取值,見 IMPORTRANGE 跨試算表同步。這一頁就是原數據層,計算層與呈現層都只讀它。

變慢時的排查順序

我自己遇到變慢,不會先動公式。先確定是哪個動作慢,再從查得快、改了也不心疼的開始查。一次只改一件事,改完用同一個動作再試一次,才知道哪個有用。

六個步驟由上往下:分清楚哪裡慢、找揮發性函式、數 IMPORTRANGE、看重複計算、看條件式格式、最後看範圍← 左右滑動看完整的圖,點圖可放大

圖:由上往下查,前面的用搜尋就找得到,最後的範圍會動到整張表的結構。

第 1 步的答案可以縮小範圍。只有開檔慢,我會先懷疑跨檔匯入;改一格就慢,先看揮發性函式、重複計算與條件式格式;只有某一張分頁慢,就先查那一張。第 2、3 步用「編輯」>「尋找並取代」搜尋公式內容就能數出來。

範圍放最後,是因為刪列刪欄會動到整張表,改錯了公式會算錯。這是我個人的順序,不是官方流程。

不是公式的問題時

如果公式在一大張表上做複雜運算,才從結果挑出要的幾筆,不如先用 FILTER 或 QUERY 挑出要的幾筆,再對它們計算。要算的格子少了,工作量就少,這是算術,不用實測。

沒有一個通用的「超過幾列就該換工具」門檻,同樣的列數,公式輕不輕差很多。試算表單檔的上限是 2,000 萬個儲存格(2026 年 9 月從 1,000 萬加倍),那是硬限制,在碰到之前慢不慢到影響工作,要看你自己的檔案。整理過還是慢,才考慮把原數據放進資料庫,讓試算表只負責呈現,見 試算表的本質。

下次它又變慢,就從排查順序的第 1 步開始吧。我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
#效能#重算#揮發性函式
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

這篇在技能樹的 Lv.0「核心思維」,模組「計算效能的基礎認知」(第 1/1 篇)。讀完這篇,路線上的下一個模組是「建立與組織試算表」。

回到技能樹

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。