Google 試算表在 2022 年隆重推出了 LAMBDA
函式跟它的輔助函式,讓使用者可以製作自己的函式,還可以在指定範圍內做複雜的運算。LAMBDA
的出現,讓我們在試算表的資料處理能力帶來了革命性的進步,可以更輕鬆地完成複雜的工作!
在這個更新前,要設計自己的函式得仰賴 Apps Script,但寫程式的門檻不低,把自製函式匯入到其他試算表也需要一點心力,實在沒那麼親民;但現在只要將 LAMBDA
和已命名函式功能搭配在一起,我們就可以輕易實現那些目標。
實務上我們會拿 LAMBDA
搭配它的輔助函式,就可以用特定方式來進一步處理範圍的資料,運算能力就會更加強大。
這次的分享只會專注在 LAMBDA
的寫法本身,也會再提已命名函式作為應用。其他的輔助函式會在日後一一介紹,LAMBDA
的力量也會慢慢解開封印的!如果這是你第一次聽說已命名函式,你可以到這邊複習一下再回來看看喔:已命名函式,超方便!
LAMBDA
函式可以讓我們設計自己的函式,在當前的試算表內可以重複運用。
為了要設計這樣的函式,我們要給 LAMBDA
參數,然後在後面用那些參數寫算式。
語法看起來像這樣:
=LAMBDA(參數1, 參數2, ..., 算式)
寫參數的時候有一些限制跟建議:
A1
、A2
這類的SUM
、AVERAGE
、QUERY
這類的雖然說參數寫中文也沒關係,但我通常寫簡單的英文字母:
val
(value 的簡寫)t
(text 的簡寫)r
(row 的簡寫)c
(column 的簡寫)a
、b
、c
、x
、y
、z
、a1
、val1
、t1
這類的也可,製作函式時看得懂就好。而後面的算式,就會用到前面定義的參數,這邊就可以開始設計函式了。
我們等等會寫這樣的東西:
把 x 的值乘以 2 的函式
=LAMBDA(x, x * 2)
把 val1 跟 val2 加起來的函式
=LAMBDA(val1, val2, val1 + val2)
把 t1 跟 t2 串起來的函式
=LAMBDA(t1, t2, t1 & t2)
在前面定義的參數都要在後面的算式用到,不然等等會回傳 #N/A
錯誤喔!
另外,如果要單獨使用 LAMBDA
函式的話,我們要再放一組括號,裡面填入實際的參數,一開始定義了多少,這邊就放多少。像是這樣:
=LAMBDA(x, x * 2)(10)
--> 10 * 2
--> 20
=LAMBDA(x, y, x * 2 + y * 3)(10, 5)
--> 10 * 2 + 5 * 3
--> 35
我會在測試 LAMBDA
是不是我想要的結果時,會放這樣一組括號,但是跟等等要介紹的輔助函式配合的時候,就不可以放了,要注意一下。
LAMBDA
雖然是可以單獨使用,但我們大多會把它跟 LAMBDA
的輔助函式搭配使用,讓 LAMBDA
發揮更大的效力。簡單介紹一下輔助函式有哪些:
MAKEARRAY
:套用 LAMBDA
函式運算,建立指定欄列大小的範圍。MAP
:對範圍內的每個值套用 LAMBDA
函式,產生出對應的新值。BYCOL
:以欄為單位,套用 LAMBDA
函式運算,回傳一列。BYROW
:以列為單位,套用 LAMBDA
函式運算,回傳一欄。REDUCE
:對範圍內的值以 LAMBDA
函式運算,累計成單一個值。SCAN
:逐列逐欄套用 LAMBDA
函式運算,回傳運算過程中的所有中間值。舉例來說,你可以用 MAP
函式把 A1
到 A10
中的每個值傳給 LAMBDA
,把結果輸出為新的一欄:
=MAP(A1:A10, LAMBDA(x, x * 5))
要注意到,如果輔助函式有多個參數要寫,參數的順序就會有關係。我的理解是:
① 對應到甲、② 對應到乙,如果有更多參數就也是這樣類推。
舉個官方文件的例子:
=MAP(A1:B3, D1:E3, G1:H3, LAMBDA(valA, valB, valC, MAX(valA, valB, valC)))
前面是輔助函式的 MAP
,包著 LAMBDA
。這邊的對應關係是這樣的:
A1:B3
對應到後面的 valA
D1:E3
對應到後面的 valB
G1:H3
對應到後面的 valC
所以綜合起來,我們可以在這下個小結論:
LAMBDA
是用來定義我們想重複使用的算式,然後輔助函式則是決定這個算式要怎麼被運用在範圍上的方法。
如果現在還是不太確定該怎麼操作的話也沒關係,之後會再逐一說明每個輔助函式的用法,會舉一些實際的例子給大家參考。
在這邊我會示範「單純用 LAMBDA
函式」的方法,還有將 LAMBDA
函式放入已命名函式功能的過程。
我想做一個輸入數值後,幫我把它乘以 5 的函式,像是:
我們可以寫:
=LAMBDA(x, x * 5)
x
x * 5
,x 乘以 5 的意思這樣就設計好了。
但在這步如果直接按下 Enter 的話,會出現 #N/A
錯誤:
這是因為雖然函式設計好了,需要實際的值來讓 LAMBDA
運用。我們在這邊加上一組括號,用實際的數值來算算看吧:
=LAMBDA(x, x * 5)(2)
這樣 LAMBDA
函式的設定就告一個段落了。
接下來把剛剛設計好的函式,打包成叫做 QUNITUPLE
(五倍的意思)的已命名函式。這樣一來就可以在試算表歡樂使用了!
點開畫面上方的「資料」>「已命名函式」:
右手邊會出現一個窗格:
點下方的「新增函式」,開始進入已命名函式的編輯畫面。
這邊就可以著手,把剛剛做好的 LAMBDA
放進去已命名函式編輯窗格裡。
這是我的設定:
這麼一來就可以在試算表內自由使用這個函式了:
看到這邊,不知道你有沒有想過:
LAMBDA
?直接用儲存格參照加減乘除就可以了吧?」LAMBDA
做已命名函式,那為什麼還要學 LAMBDA
?」所以我想列了一些適合用 LAMBDA
的場合:
不適合用 LAMBDA
函式的場合:
LAMBDA
讓函式看起來更複雜。LAMBDA
函式好。你的試算表本身已經有點「重」、效能不好的話,優先用內建函式解決問題會比較好一些;還有,如果你想讓 LAMBDA
結合 Apps Script、或是結合需要大量資源運算的函式(比如說大範圍的 IMPORTRANGE
、QUERY
、FILTER
等),我也不那麼推薦,理由同上,因為效能恐怕會不太好。最後謝謝讀者的敲碗 🙏✨✨:
之後會開始解釋 LAMBDA
的輔助函式,也會介紹一些實際的案例!
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!