同一段折扣算式在十幾個儲存格裡複製來複製去,哪天折扣方式改了,你得一格一格找。具名函式可以讓你把這段算式存成自己的函式,之後像 SUM 一樣直接打名字就能用。
LAMBDA 的語法,以及搭配 MAP、REDUCE 的寫法,在 LAMBDA 與 LET 基礎 已經講過了。這篇專心講介面:選單在哪裡、每個欄位要填什麼、建好之後怎麼用、怎麼改、怎麼刪。
先看這次要做的函式
我手上有一張手搖飲的價目表,B 欄是單價,要打 12% 的折扣,也就是賣價 = 單價 × (1 - 0.12)。折扣率放在 G1:
| A | B | G | |
|---|---|---|---|
| 1 | 品項 | 單價 | 0.12 |
| 2 | 蘋果紅茶 | 45 | |
| 3 | 烏龍奶茶 | 55 | |
| 4 | 蘋果綠茶 | 45 | |
| 5 | 青茶 | 35 | |
| 6 | 桂花烏龍 | 50 |
先手算第一列:45 × (1 - 0.12) = 45 × 0.88 = 39.6。算式本身不難,只是每一列都寫 的話,折扣的算法就散在整欄裡了。
我們把它做成一個叫 DISCOUNT_PRICE 的函式,吃兩個值:單價和折扣率。如果不存成具名函式,直接寫的話是這樣:
用 LAMBDA 直接呼叫,單價 45、折扣 0.12
=LAMBDA(price, off, price*(1-off))(45, 0.12)你應該會得到 39.6。具名函式的欄位,就是把這條 LAMBDA 拆開填進面板裡:price、off 是引數預留位置,price*(1-off) 是公式定義。
打開已命名函式面板
點畫面上方的「資料」>「已命名函式」,右側會出現面板。
圖:面板還沒建過函式時,會看到新增函式的入口。
另外還有一條路:在已經寫好公式的儲存格上按右鍵,選「查看更多儲存格動作」>「定義具名函式」,Google 會把那格的公式帶進來當作定義的起點。出處是 Google 說明中心的 Named functions in Google Sheets。
新增函式
在面板按下新增函式,會看到四個欄位。
圖:第一頁的四個欄位,由上到下填完。
- 函式名稱:之後在儲存格打的名字,填
DISCOUNT_PRICE。Google 說明中心寫名稱會變成大寫。 - 函式說明:會顯示在函式說明框的「關於」區塊,給之後用的人看,填「單價乘上 (1 - 折扣率)」。
- 引數預留位置(選填):填
price、off。它們只是用來描述「這裡要放什麼」的文字標籤。 - 公式定義:真正執行的算式,填 。
這邊有兩個要記的地方。
第一,公式定義裡不用再寫 LAMBDA,引數已經在上一個欄位宣告了。第二,公式定義必須能被解析,括號和逗號都要寫對。
公式定義欄位裡填的內容,price 與 off 是上面宣告的預留位置
=price*(1-off)補上引數說明與範例
填完第一頁按「繼續」,會進到預覽頁。在「其他資訊(選填)」底下,每個引數預留位置各有「引數說明」和「引數範例」兩格;要改前一頁的內容按「返回」。
圖:引數說明和引數範例,之後會出現在函式說明框裡。
我自己會填,因為這兩格就是之後打函式時彈出來的提示。像這樣:
price:說明填「未打折的單價」,範例填45。off:說明填「折扣,0.12 代表打 12% 的折扣,也就是 88 折」,範例填0.12。
折扣率到底是填 0.12 還是 12,幾個月後的你八成會忘,寫進說明就不用猜了。
填完按「建立」,函式就存進這份試算表。
在儲存格使用
到 E2,直接輸入函式名稱,Sheets 會像內建函式一樣跳出提示,而且可以看到剛剛填的說明和範例。
圖:函式說明框裡有函式說明、引數說明與範例。
單價用 B2,折扣率放在 G1,記得加上絕對參照:
用具名函式算蘋果紅茶打折後的賣價
=DISCOUNT_PRICE(B2, $G$1)你應該會得到 39.6。往下填到 E6,來看看結果:
| E | |
|---|---|
| 2 | 39.6 |
| 3 | 48.4 |
| 4 | 39.6 |
| 5 | 30.8 |
| 6 | 44 |
手算一下烏龍奶茶:55 × 0.88 = 48.4,跟表裡一致。
引數預留位置只是描述用的,不能直接拿來當公式用。如果你在儲存格裡直接打 ,會得到錯誤,因為這份試算表裡沒有叫 price 的東西,要透過函式呼叫把值傳進去。
編輯與刪除
回到「資料」>「已命名函式」,面板會列出這份試算表裡所有的具名函式。函式清單裡的每個函式都可以進去修改定義,或是刪掉(入口見下圖)。
圖:函式清單裡,每個函式可以進去改定義,或是刪掉。
- 編輯:改公式定義或引數說明,儲存後,所有用到這個函式的儲存格會跟著重算。折扣方式改了,只要改這一處。
- 刪除:函式刪掉之後,用到它的儲存格就找不到這個名字了,會出現錯誤,所以刪之前先確認有沒有人在用。這個情況在 具名函式進階陷阱 會再展開。
另外一個小細節:公式定義裡如果寫了儲存格範圍,儲存時會被轉成絕對參照。想讓呼叫的人自己決定範圍,就把範圍做成引數傳進來,像上面的 price。
取名字的規則
依 Google 具名函式說明,兩組名稱規則要分開看:
- 函式名稱不能與內建函式(例如
SUM)、TRUE、FALSE或A1/R1C1位置同名,也不能以數字開頭;不可有空格,特殊符號只允許底線,長度須少於 255 字元。 - 引數預留位置不能重複、不能是儲存格位置,不可有空格或底線以外的特殊符號。但官方明確允許把引數命名為
SUM;同名時引數優先。實務上仍建議用amount、price等能表達用途的名稱,避免遮蔽內建函式。
例如把函式名稱填成 SUM,離開欄位便會顯示「某個內建函式已使用這個名稱」而無法建立。但函式名叫 MRSHEET_ADD、引數依序命名 sum、value、定義 ,就能完成預覽並建立, 回 3。也就是「函式名不可用 SUM,但引數可用 sum」,不是一律禁止所有內建同名文字。
想一個之後看得懂的名字就好,更多命名習慣放在 具名函式實戰:團隊共用函式庫。
練習
自己建一個含稅價函式
在「已命名函式」面板新增一個 PRICE_WITH_TAX,引數預留位置是 price 和 rate,公式定義是未稅價乘上 (1 + 稅率)。建好之後,直接寫成 LAMBDA 驗算一次:未稅價 45、稅率 0.05,答案是多少?
建好之後,不妨把你手上最常重複貼的一段算式也存進去,下一步就看看它用起來順不順手。接下來想知道團隊怎麼共用一組函式,就看 具名函式實戰。
我是喜特先生,Mr. Sheet,我們下個教學見!
接下來可以
相關文章
查看所有文章留言討論
共 0 則留言





