跳到主要內容跳到頁尾

用具名函式建團隊函式庫:含稅價、會員等級、工作天數

7 分鐘閱讀Lv.3 中級摘要與日期

把團隊常用的計算邏輯,像含稅價、會員等級、扣掉假日的工作天數,做成一組具名函式放在一份函式庫試算表,其他試算表用「匯入函式」取用。附命名慣例與維護做法。

發布 更新

文章目錄

團隊裡的銷售報表、會員名單、出貨排程常常是三份不同的試算表,每一份都有自己的一套含稅價算法。哪天稅率或會員門檻改了,就得一份一份去找、一格一格改,而且很容易漏掉一份。

這篇的做法是把這些常用邏輯做成具名函式,放在一份「函式庫」試算表裡,其他試算表用「匯入函式」拿過去用。具名函式怎麼新增、怎麼填欄位,在 具名函式怎麼建立 講過了,LAMBDA 本身的語法請看 LAMBDA 與 LET 基礎,這邊直接進實戰。

先決定函式庫要放什麼

我的標準很簡單:同一段算式在兩份以上的試算表出現,而且規則是「公司的規定」而不是「某一份表的設定」,就值得做成函式。這次挑三個:

函式引數做什麼
TAX_PRICEprice, rate未稅價算含稅價,四捨五入到整數
MEMBER_TIERtotal依年度消費金額回傳會員等級
WORK_DAYSstart_date, end_date, holidays兩個日期之間的工作天數,扣掉公司假日

下圖是整體的樣子:一份函式庫試算表放函式,其他三份試算表各自匯入一份來用。

一份函式庫試算表,透過匯入函式分別匯入到銷售報表、會員名單、出貨排程三份試算表← 左右滑動看完整的圖,點圖可放大

圖:函式只在函式庫那份試算表裡維護,其他三份是用匯入函式取得的。

含稅價 TAX_PRICE

銷售報表裡有四個品項的未稅價,營業稅 5%,放在 G1:

ABG
1品項未稅價0.05
2蘋果紅茶45
3烏龍奶茶55
4青茶35
5桂花烏龍50

先手算:45 × 1.05 = 47.25,四捨五入到整數是 47。桂花烏龍 50 × 1.05 = 52.5,四捨五入是 53。

把這個算法放進函式庫,欄位這樣填:

  • 函式名稱:TAX_PRICE
  • 引數預留位置:price、rate
  • 公式定義:

建好之前,可以先用 LAMBDA 直接呼叫驗算邏輯:

Google 試算表公式
fx

用 LAMBDA 直接呼叫,驗算含稅價的邏輯,未稅價 45、稅率 0.05

=LAMBDA(price, rate, ROUND(price*(1+rate), 0))(B2, $G$1)

建好具名函式之後,報表裡寫的是:

Google 試算表公式
fx

用具名函式算含稅價,稅率放在 G1 的儲存格

=TAX_PRICE(B2, $G$1)

往下填,來看看結果:

E
247
358
437
553

我選擇把稅率做成引數,而不是直接寫死 0.05 在函式裡。稅率改了,只要改 G1 一格,函式本身不用動。不過如果是「全公司永遠一樣」的數字,寫死在函式裡呼叫起來比較短,這就看你們的習慣。我個人會把稅率放引數,因為同一個函式有時也會拿去算外銷的零稅率。

會員等級 MEMBER_TIER

會員名單裡有年度消費金額,規定是 5000 以上是「金卡」,2000 以上是「銀卡」,其餘是「一般」:

AB
1會員編號年度消費
2M0016160
3M0021665
4M0034980
5M0042240
6M005360

M003 的 4980 差 20 元就是金卡,這種邊界值最容易在不同的表裡寫出不同的結果,所以特別適合放在函式裡統一。

  • 函式名稱:MEMBER_TIER
  • 引數預留位置:total
  • 公式定義:

驗算邏輯的 LAMBDA 寫法是:

Google 試算表公式
fx

用 LAMBDA 直接呼叫驗算,年度消費放在 B2

=LAMBDA(total, IFS(total>=5000, "金卡", total>=2000, "銀卡", TRUE, "一般"))(B2)

IFS 最後一組條件用 TRUE 當作「其他情況」,這個寫法在 IFS 與 SWITCH 實戰 有講。建好之後,會員名單裡就是 ,往下填:

E
2金卡
3一般
4銀卡
5銀卡
6一般

門檻改成 6000 的話,只要改函式庫裡的公式定義,不用在名單裡一格一格找。

工作天數 WORK_DAYS

出貨排程要算「從接單日到出貨日,中間有幾個工作天」,要扣掉週末和公司自己的假日。公司假日放在 J2:J3:

BCJ
1接單日出貨日公司假日
22026/10/052026/10/162026/10/08
32026/10/14

手算:2026/10/05 是星期一、2026/10/16 是星期五,中間兩週共 10 個工作天,扣掉星期四的 10/08 與星期三的 10/14,剩 8 天。

  • 函式名稱:WORK_DAYS
  • 引數預留位置:start_date、end_date、holidays
  • 公式定義:
Google 試算表公式
fx

用 LAMBDA 直接呼叫驗算,假日範圍當作第三個引數傳入

=LAMBDA( start_date, end_date, holidays, NETWORKDAYS(start_date, end_date, holidays) )( B2, C2, $J$2:$J$3 )

結果是 8,跟手算一致。建好之後用 。

假日範圍我做成引數,而不是寫進函式定義裡,有兩個原因:公式定義裡的範圍儲存時會被轉成絕對參照,換到別份試算表就不一定對得上;另外各份試算表想放假日的位置也不一定一樣。把範圍當引數傳入就不用擔心這點,所以範圍一律用引數傳入,不要寫進函式定義裡。

NETWORKDAYS 這類日期函式的用法在 日期計算實戰 有更多例子。

取名字的慣例

三個函式放在一起之後,名字好不好懂差很多。我目前用的習慣:

  • 全部大寫、單字用底線隔開:TAX_PRICE、MEMBER_TIER。Google 說明中心寫函式名稱不能有空格,也不能有底線以外的特殊符號。
  • 用「名詞加用途」,不寫動詞開頭:TAX_PRICE 比 CALC_TAX 好讀,因為打到一半就看得出是在算價格。
  • 引數名稱寫完整:start_date 比 s 清楚,因為這些名稱會跟著函式說明框一起顯示。
  • 小心長得像儲存格位置的名字:TAX1 是第 TAX 欄第 1 列的儲存格位置,Google 說明中心明講這種名字不行;TAX_1 就沒問題。
  • 想加團隊前綴也可以,例如 MS_TAX_PRICE,之後在一堆函式裡一眼就知道是自己人寫的。名稱長度的上限是不到 255 個字元,不太會碰到。

函式說明和引數說明建議寫「單位和填法」:稅率寫「填 0.05,不是 5」。三個月後再打開,就不用回頭猜了。

從函式庫匯入到其他試算表

函式庫建好了,換其他試算表取用。流程是:

  1. 開啟要使用函式的那份試算表。
  2. 點「資料」>「已命名函式」,在右側面板點「匯入函式」。
  3. 跳出檔案選擇視窗「匯入其他 Google 試算表中的已命名函式」,選函式庫那份,按「插入」。
  4. 接著跳出勾選視窗「請選取要從指定試算表匯入的已命名函式:」,勾選要匯入的函式後按「匯入」,要全部匯入就按「全部匯入」。

匯入函式的對話框,選擇來源試算表後勾選要匯入的函式

圖:選好函式庫試算表,勾選 TAX_PRICE、MEMBER_TIER、WORK_DAYS 後匯入。

匯入時有幾個行為,是說明中心寫的:

  • 目標試算表裡已經有同名的具名函式,匯入的版本會取代它。
  • 匯入的函式如果依賴另一個具名函式,Sheets 會警告並標出相依的函式,所以要一起選。
  • 公式碰到外部來源,像 IMAGE,也會有警告。

匯入之後,函式和來源試算表是否連動,說明中心沒有寫。維護時一律當作「函式庫改了,其他試算表要再匯入一次才會更新」來規劃,細節在 具名函式進階陷阱。

函式庫要怎麼維護

  • 只在函式庫試算表裡改函式,其他表一律不要改匯入進來的版本,不然下次匯入同名函式會被整個取代掉。
  • 在函式庫放一個「異動紀錄」工作表,一列一次修改:日期、函式名稱、改了什麼。每次改完,通知有用到的人重新匯入。
  • 函式說明寫上版本日期,例如「2026/10/11 起稅率改為引數」,對照起來不用猜哪份是新的。
  • 新增函式時,先在儲存格用 LAMBDA 直接呼叫驗算,邏輯對了再存成具名函式。

練習

1

免運費函式

公司規定訂單金額滿 1000 免運費,不到 1000 運費 80 元。請設計一個 SHIPPING_FEE 函式,引數預留位置叫 total,寫出公式定義,並用 LAMBDA 直接呼叫驗算:訂單金額 360 的運費是多少?訂單金額 1665 呢?

函式庫從三個函式起步就夠了,等其他人開始問「這個算法在哪」,再慢慢加。

我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

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

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

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

免費,隨時可取消。

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