跳到主要內容跳到頁尾

動態資料設計:資料變多,公式不用跟著改

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

從每個月要把 A2:A100 改成 A2:A135 的硬編碼問題出發,對照寫死範圍與開放式範圍、把折扣率這類數字抽到設定儲存格,並說明什麼時候不需要這麼動態。

發布 更新

文章目錄

你有過這種經驗嗎?每個月底結帳,都要打開試算表,把公式裡的範圍從「第 2 列到第 100 列」手動改成「第 2 列到第 135 列」,只因為這個月多了 35 筆訂單。

這種每個月都要回頭維護的公式,叫做硬編碼(Hard-coding),意思是把「會變的東西」直接寫死在公式裡。忘了改的話,報表不會報錯,只會安靜地少算。

左邊 SUM 範圍寫死到第 100 列,第 101 到 135 列共 35 筆被漏掉;右邊 SUM 沒寫終點,135 列全部算進去← 左右滑動看完整的圖,點圖可放大

圖:同樣 135 列資料,左邊那條公式少算了 35 筆,而且沒有任何錯誤提示。

公式漏掉新資料,但不會報錯

用小一點的資料手算一次。8 筆訂單放在 A2:B9,A 欄是訂單編號,B 欄是金額:

訂單編號金額
O-101128
O-10287
O-103243
O-10461
O-105176
O-10694
O-107312
O-10847

128 + 87 + 243 + 61 + 176 + 94 + 312 + 47 = 1148。

總額用 算,得到 1148,沒問題。接著下一週多了 3 筆:O-109 是 205、O-110 是 38、O-111 是 119,接在第 10 到 12 列。

我在 D2 放 ,D3 放 ,來看看新增 3 筆之前與之後:

公式新增 3 筆之前新增 3 筆之後
11481148
11481510

正確答案是 1148 + 205 + 38 + 119 = 1510。寫死到 B9 的那條還是 1148,少了 362,而且畫面上一切正常。

寫死的不只是範圍

跟家人學煮飯時,長輩常說「加兩碗水」。換了一個超大的碗,或今天想煮 10 人份,這個指令就失效了;改成「水跟米的比例是 1:1」,碗多大都成立。

你為了 9 點的課設了每天 07:30 的鬧鐘,國定假日照樣被吵醒。如果鬧鐘能連動行事曆,變成「第一堂課前 90 分鐘」,就不會有這種事。

試算表裡寫死的東西通常有三種:

寫死的做法動態的做法
加總第 2 列到第 100 列加總所有有資料的列
折扣率直接寫 0.85折扣率從一個設定儲存格讀取
報表標題打「2026 年 10 月」標題從「報表月份」那格自動產生

後面照這三種順序走一遍。

範圍:算到資料結束為止

範圍的動態化有三條路,語法這篇不重講,各自有專門的文章:

  • 開放式範圍:只寫起點、不寫終點,像上面的 B2:B。寫法與搭配 ARRAYFORMULA 的用法在 ARRAYFORMULA 入門。
  • 表格:把資料轉成表格,新增一列時公式引用的範圍自動延伸,見 Google 試算表的「表格」功能。
  • FILTER:結果跟著資料與條件重算,不必手動框範圍,見 FILTER 入門。

我自己的選法是,資料有欄名、而且常常新增,就先轉成表格;只是在別處加一個總計,開放式範圍就夠了;要依條件挑出一部分資料時才用 FILTER。

開放式範圍有一個要注意的地方:資料欄下面不要放總計。 會把底下的總計格自己也算進去,Sheets 會回報循環依附性的錯誤。總計放在欄位上方、旁邊,或另一個工作表。

另外我會在旁邊放一格對帳用的 。新增 3 筆之後它應該是 11,跟你預期的訂單數對得上,就知道範圍沒漏。資料量很大時整欄範圍會不會變慢,可以參考 計算效能的基礎認知,這篇不討論。

數字:改一格,全部更新

經營一家飲料店,有 5 種飲料,慶祝周年慶全部打 85 折(8.5 折)。

沒有參數化的話,每一種飲料的公式都寫 *0.85。下次想改成 8 折,你得手動改 5 次,漏了一個,那杯的定價就錯了。

參數化是把 0.85 放在一個固定的儲存格,所有公式都去讀它:

設定工作表有一格折扣率 0.85,右邊五種飲料的折後價公式都指向這一格← 左右滑動看完整的圖,點圖可放大

圖:五條公式都只認得「折扣率」那一格,要改折扣只動那一格。

我把價目表放在 A1:C6,A 欄是品項、B 欄是原價,旁邊 E1 放「折扣率」、F1 放 0.85。C2 這樣寫,往下拖到 C6:

Google 試算表公式
fx

原價乘以折扣率,四捨五入到整數;$F$1 要鎖死,往下拖才不會跑掉

=ROUND(B2*$F$1,0)

$ 的意思放在 參照的藝術,這邊只要知道 $F$1 往下拖不會變。來看看結果:

品項原價折後價(F1 為 0.85)折後價(F1 改成 0.8)
蘋果紅茶584946
蘋果綠茶655552
青茶726158
烏龍奶茶857268
鮮奶茶1159892

F1 從 0.85 改成 0.8,C 欄五個數字一起變。

參數集中到「設定」工作表

參數多了以後,我會開一個專門的「設定」工作表,把折扣率、稅率、報表月份這些會變的值集中在那裡。公式前面多一個工作表名稱:。工作表名稱是中文時,輸入完編輯列會自動補上單引號,變成 ,兩種寫法算出來一樣。

設定工作表有折扣率、稅率、報表月份三個參數,價目表的折後價公式引用設定!$B$1← 左右滑動看完整的圖,點圖可放大

圖:參數都在同一頁,接手的人打開「設定」就知道哪些值可以調。

報表月份也是同樣的做法。回到價目表旁邊,F2 放 2026/10/01,標題這樣寫:

Google 試算表公式
fx

把報表月份格式化成「2026 年 10 月」,接在標題文字後面

="銷售月報 " & TEXT(F2,"yyyy 年 m 月")

得到「銷售月報 2026 年 10 月」。下個月只要把 F2 改成 2026/11/01,標題就跟著換。我這邊用固定日期,不用 TODAY(),因為月報要的是「這份報表算的是哪個月」,不是今天幾號。

參數的值如果有來歷(為什麼是 0.85、誰決定的),在那一格加備註,寫法見 讓別人看得懂的試算表。想把 設定!$B$1 換成「折扣率」這種名字,可以看 設計可維護的試算表 的命名範圍。

動態換來什麼,失去什麼

開放式範圍換來不會漏資料,代價是別人看公式看不出「算到哪一列」,而且下面不能再放東西。參數化換來一處修改,代價是公式要跳到另一頁才看得到數值,參數越多越難追。

不是每份表都值得這樣做。我通常這樣判斷:

  • 這份表會用超過三個月、資料會持續增加、或要分享給別人,就做動態設計。
  • 只是回覆老闆一分鐘後要的臨時數字、一次性的草稿分析,寫死也無妨。

如果不確定,問自己一個問題:「N 個月後,我會不會需要手動改這個公式?」答案是會,就動態化。

1

平均訂單金額

資料同上,A1:B12 有 11 筆訂單(含新增的 3 筆)。請寫一條公式,算出平均訂單金額,四捨五入到小數第 1 位,而且之後再新增訂單時公式不用改。

答案是 137.3(1510 除以 11 是 137.2727...)。

分享:
#動態設計#參數化#硬編碼
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

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

接下來可以

這篇在技能樹的 Lv.0「核心思維」,模組「動態資料設計思維」(第 1/1 篇)。讀完這篇,路線上的下一個模組是「陣列思維」。

回到技能樹

相關文章

查看所有文章

留言討論

共 0 則留言

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

免費,隨時可取消。

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