LAMBDA 函式(一):基本原理

閱讀時間約 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,我們下個教學見!



avatar-img
12.5K會員
147內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
喜特先生官方沙龍 的其他內容
有招 LET,可以讓你的長算式更清晰好讀!
已命名範圍是 Google 試算表的功能,簡單來說可以把儲存格參照範圍改成自己想要的名字,可以讓算式更好讀、減少維護時間、減少錯誤機率、在算式和可以用這個名字引用這個範圍。來看看怎麼做!
接續著上次提到的 COUNT、COUNTA,我們再稍稍延伸一點,把 COUNT 函式的家族補完,介紹最後的兩名成員:COUNTUNIQUE 跟 COUNTBLANK。
今天想聊一組比較冷門的函式,ARABIC 跟 ROMAN 函式,它可以把羅馬數字轉跟阿拉伯數字互換,語法相當單純好學!
這是「按條件算OO」系列文的第五篇教學!今天會來聊聊 MINIFS。
有招 LET,可以讓你的長算式更清晰好讀!
已命名範圍是 Google 試算表的功能,簡單來說可以把儲存格參照範圍改成自己想要的名字,可以讓算式更好讀、減少維護時間、減少錯誤機率、在算式和可以用這個名字引用這個範圍。來看看怎麼做!
接續著上次提到的 COUNT、COUNTA,我們再稍稍延伸一點,把 COUNT 函式的家族補完,介紹最後的兩名成員:COUNTUNIQUE 跟 COUNTBLANK。
今天想聊一組比較冷門的函式,ARABIC 跟 ROMAN 函式,它可以把羅馬數字轉跟阿拉伯數字互換,語法相當單純好學!
這是「按條件算OO」系列文的第五篇教學!今天會來聊聊 MINIFS。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
Thumbnail
Lambda Log 是存放至 CloudWatch Logs, 格式跟log level只能預設,但現今是可以修改的 Log 格式:Text Log level:無 Log Group :/aws/lambda/Function Name 實驗開始 新建立測試Functi
Thumbnail
雖然lambda本身的概念就是主打無伺服器+各自獨立運行的function,但有時又不免其然的需要共用代碼,像是api可能都需要做權限驗證。 會有這方面的研究是因為公司正好要將app跟web共用的api搬到api gateway去處理,但我馬上就想到會有code reuse的問題,怎麼樣用可維護的
Thumbnail
Continue from here Prerequisites Create an IAM role with access to Bedrock Create an "IAM Role" that defines the permissions needed to call Bed
Thumbnail
你會在程式裡面寫函數嗎? 通常寫函數的第一個問題,就是要給函數取名字。 名字取得不好,後來調用函數不自然,就會拖垮整個寫程式的效率。 為函數命名,也是一門技術,好的函數命名,就能提高函數被重複使用的頻率。 然而,也是在某些情況下,我們需要「一次性函數」。 沒錯,用完即丟的函數。
Thumbnail
A lambda function is a small anonymous function and can only have one expression.
Thumbnail
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
最近公司寫的系統要上線 , EFS 的存取點套用開發時設定出問題 背景是這樣的 開發 : 存取點 path 設 /xxx , 使用者和群組 id 設 1000 , 目錄使用者和群組 id 也設 1000 , 權限開 0600 (owner 可讀可寫) 上線 : 設定如同開發 神奇的事情出現了 , 開
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
如果我只是想要重複做一些很簡單的運算,還有沒有更簡潔的方式,那就是Lambda匿名函式。 本文將介紹 : Lambda匿名函式的用法,也比較跟自定函式的差異之處。 結合map,filter,sorted函式做應用介紹
Thumbnail
lambda 函式,又稱為“匿名函式”,是一種在 Python 中快速定義單行函式的方法,與 def 定義函式不同,lambda 函式不需要命名。本文將介紹 lambda函式的基礎語法,以及實際應用範例演示。
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
Thumbnail
Lambda Log 是存放至 CloudWatch Logs, 格式跟log level只能預設,但現今是可以修改的 Log 格式:Text Log level:無 Log Group :/aws/lambda/Function Name 實驗開始 新建立測試Functi
Thumbnail
雖然lambda本身的概念就是主打無伺服器+各自獨立運行的function,但有時又不免其然的需要共用代碼,像是api可能都需要做權限驗證。 會有這方面的研究是因為公司正好要將app跟web共用的api搬到api gateway去處理,但我馬上就想到會有code reuse的問題,怎麼樣用可維護的
Thumbnail
Continue from here Prerequisites Create an IAM role with access to Bedrock Create an "IAM Role" that defines the permissions needed to call Bed
Thumbnail
你會在程式裡面寫函數嗎? 通常寫函數的第一個問題,就是要給函數取名字。 名字取得不好,後來調用函數不自然,就會拖垮整個寫程式的效率。 為函數命名,也是一門技術,好的函數命名,就能提高函數被重複使用的頻率。 然而,也是在某些情況下,我們需要「一次性函數」。 沒錯,用完即丟的函數。
Thumbnail
A lambda function is a small anonymous function and can only have one expression.
Thumbnail
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
最近公司寫的系統要上線 , EFS 的存取點套用開發時設定出問題 背景是這樣的 開發 : 存取點 path 設 /xxx , 使用者和群組 id 設 1000 , 目錄使用者和群組 id 也設 1000 , 權限開 0600 (owner 可讀可寫) 上線 : 設定如同開發 神奇的事情出現了 , 開