LAMBDA 函式(一):基本原理

2024/04/07閱讀時間約 8 分鐘

Google 試算表在 2022 年隆重推出了 LAMBDA 函式跟它的輔助函式,讓使用者可以製作自己的函式,還可以在指定範圍內做複雜的運算LAMBDA 的出現,讓我們在試算表的資料處理能力帶來了革命性的進步,可以更輕鬆地完成複雜的工作!

在這個更新前,要設計自己的函式得仰賴 Apps Script,但寫程式的門檻不低,把自製函式匯入到其他試算表也需要一點心力,實在沒那麼親民;但現在只要將 LAMBDA 和已命名函式功能搭配在一起,我們就可以輕易實現那些目標。

實務上我們會拿 LAMBDA 搭配它的輔助函式,就可以用特定方式來進一步處理範圍的資料,運算能力就會更加強大。

這次的分享只會專注在 LAMBDA 的寫法本身,也會再提已命名函式作為應用。其他的輔助函式會在日後一一介紹,LAMBDA 的力量也會慢慢解開封印的!如果這是你第一次聽說已命名函式,你可以到這邊複習一下再回來看看喔:已命名函式,超方便!




語法解釋

LAMBDA 函式可以讓我們設計自己的函式,在當前的試算表內可以重複運用。

為了要設計這樣的函式,我們要給 LAMBDA 參數,然後在後面用那些參數寫算式。

語法看起來像這樣:

=LAMBDA(參數1, 參數2, ..., 算式)

寫參數的時候有一些限制跟建議:

  • 不可以是儲存格參照或範圍,像是 A1A2 這類的
  • 不可以寫空格或特殊字元
  • 開頭也不可以寫數字
  • 通常不會寫內建函式名稱,像是 SUMAVERAGEQUERY 這類的

雖然說參數寫中文也沒關係,但我通常寫簡單的英文字母:

  • 數字寫 val(value 的簡寫)
  • 文字寫 t(text 的簡寫)
  • 列寫 r(row 的簡寫)
  • 欄寫 c(column 的簡寫)
  • abcxyza1val1t1 這類的也可,製作函式時看得懂就好。

而後面的算式,就會用到前面定義的參數,這邊就可以開始設計函式了。

我們等等會寫這樣的東西:

把 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 函式把 A1A10 中的每個值傳給 LAMBDA,把結果輸出為新的一欄:

=MAP(A1:A10, LAMBDA(x, x * 5))
raw-image

要注意到,如果輔助函式有多個參數要寫,參數的順序就會有關係。我的理解是:

raw-image

① 對應到甲、② 對應到乙,如果有更多參數就也是這樣類推。

舉個官方文件的例子:

=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 的函式,像是:

  • 放 2 進去,回傳 10。(2 * 5 = 10)
  • 放 5 進去,回傳 25。(5 * 5 = 25)
  • 放 10 進去,回傳 100。(10 * 5 = 25)

我們可以寫:

=LAMBDA(x, x * 5)
  • 參數:x
  • 算式:x * 5,x 乘以 5 的意思
raw-image

這樣就設計好了。

但在這步如果直接按下 Enter 的話,會出現 #N/A 錯誤:

raw-image

這是因為雖然函式設計好了,需要實際的值來讓 LAMBDA 運用。我們在這邊加上一組括號,用實際的數值來算算看吧:

=LAMBDA(x, x * 5)(2)
raw-image

這樣 LAMBDA 函式的設定就告一個段落了。


第二步:再加入「已命名函式」

接下來把剛剛設計好的函式,打包成叫做 QUNITUPLE(五倍的意思)的已命名函式。這樣一來就可以在試算表歡樂使用了!

點開畫面上方的「資料」>「已命名函式」:

raw-image

右手邊會出現一個窗格:

raw-image

點下方的「新增函式」,開始進入已命名函式的編輯畫面。

raw-image

這邊就可以著手,把剛剛做好的 LAMBDA 放進去已命名函式編輯窗格裡。

這是我的設定:

raw-image

這麼一來就可以在試算表內自由使用這個函式了:

raw-image




使用 LAMBDA 的時機

看到這邊,不知道你有沒有想過:

  • 「這樣不會有點多餘嗎?如果算式很簡單、只需要計算這個東西一次,我何必要用 LAMBDA?直接用儲存格參照加減乘除就可以了吧?」
  • 「我也可以不用 LAMBDA 做已命名函式,那為什麼還要學 LAMBDA?」

所以我想列了一些適合用 LAMBDA 的場合:

  • 想對範圍裡的值做複雜運算的時候
  • 想把自己設計的算式,打包成已命名函式的時候
  • 想重複使用相同的算式的時候

不適合用 LAMBDA 函式的場合:

  • 只想做簡單運算的時候:像上面乘以 5 的例子,這類加減乘除、簡單取總和、平均、最大值、最小值、算儲存格數量這些的,就沒必要用 LAMBDA 讓函式看起來更複雜。
  • 想讓試算表效能提升的時候:大多數的內建函式的效能通常比 LAMBDA 函式好。你的試算表本身已經有點「重」、效能不好的話,優先用內建函式解決問題會比較好一些;還有,如果你想讓 LAMBDA 結合 Apps Script、或是結合需要大量資源運算的函式(比如說大範圍的 IMPORTRANGEQUERYFILTER 等),我也不那麼推薦,理由同上,因為效能恐怕會不太好。




最後謝謝讀者的敲碗 🙏✨✨:

raw-image

之後會開始解釋 LAMBDA 的輔助函式,也會介紹一些實際的案例!




如果你喜歡這次的文章,歡迎你透過這些方法支持我:

  • 按下愛心、按下儲存
  • 留言告訴我你的想法
  • 加入喜特先生的官方沙龍,即時看到我發布的教學
  • 付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
  • 追蹤喜特先生的 Facebook
  • 這邊小額贊助我的創作!

想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!

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



4.7K會員
137內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
發表第一個留言支持創作者!