接著想要一口氣介紹兩個類似的 LAMBDA
輔助函式:BYROW
跟 BYCOL
。
「row」跟「col」(column 的縮寫)在 Google 試算表分別是「列」與「欄」,這邊的「by」可翻成「每⋯⋯」的意思,所以你可以把它們兩個函式理解成:
BYROW
:在指定範圍的逐列套用 LAMBDA
函式。BYCOL
:在指定範圍的逐欄套用 LAMBDA
函式。我們常在這些地方用 BYROW
跟 BYCOL
:
SUM
、AVERAGE
、COUNT
/ COUNTA
、MAX
、MIN
):計算每列或是每欄的聚集結果。MAP
。老樣子,歡迎來這邊領取練習用的試算表,一起來實作看看!
=BYROW(範圍, LAMBDA)
=BYCOL(範圍, LAMBDA)
LAMBDA
函式的範圍。這邊只能填一個,不能有多個。BYROW
或 BYCOL
套用於範圍內每列或每欄的自訂函式。看得出這兩個函式語法很接近!另外給你一個小技巧:
BYROW
函式的結果會「往下長」BYCOL
函式的結果會「往右長」我想先舉個 BYROW
的例子,一起來看看語法怎麼寫吧。
假如我想一口氣計算 A 欄的各店家第一季到第四季營收(B 欄到 E 欄)的總和(E 欄):
我要先指定計算的範圍,也就是 B2
到 E4
:
=BYROW(B2:E4,
接下來就是 LAMBDA
了。我想取每列的總和,所以代號取 row
(表「列」的意思),再用 SUM
把它包起來:
=BYROW(B2:E4, LAMBDA(row, SUM(row))
這樣就一口氣算好了!
要達到一樣這種一口氣的效果,或許要借助 ArrayFormula
的力量:
=ArrayFormula(B2:B + C2:C + D2:D + E2:E)
不過看起來沒那麼理想。一來是它會產生很多 0,可能得再用其他方法才可以消去 0(像是 IF
或是 ARRAY_CONSTRAIN
限制顯示的結果),二來是這串「B2:B + C2:C + D2:D + E2:E
」看起來不漂亮,萬一有很多欄要加總的話,也挺花時間的。
你也可以在開頭寫 SUM
來算整列,然後再手動向下拉:
=SUM(B2:E2)
但這樣就多了一步,且工作表內的算式就會變多,會影響管理跟效能。
所以這就是 BYROW
跟 BYCOL
常常會和聚集函式在一起用的一大原因!
我把這個結果放在「BYROW 範例」工作表,你可以參考看看。
BYCOL
也是類似的使用場景,只是變成逐欄計算。舉例來說,我們用同一組資料,來算「每季最高營收」是多少:
我們在 B2
以 BYCOL
起頭:
=BYCOL(
範圍一樣是 B2
到 E4
:
=BYCOL(B2:E4,
最後定義 LAMBDA
要如何計算。我想取每欄的最大值,所以代號取 col
(表「欄」的意思),再用 MAX
把它包起來:
=BYCOL(B2:E4, LAMBDA(col, MAX(col)))
來看看結果:
這樣就搞定啦!
我們最後來看一個比較複雜一點的 BYROW
場景。
假設你是一位班導師。最後一次段考結束了,你收到了每個學生每科的成績。你要基於下面的條件,給學生兩種徽章來鼓勵同學:
這是成績單,我們要在 G 欄寫產生出結果:
好!來試著寫看看吧。我們先釐清一下需求:
B2:F31
IFS
跟 IFNA
。要計算平均值就會用到 AVERAGE
,要找最大值就是 MAX
。因為要對每列做判斷,所以選擇以 BYROW
開頭:
=BYROW(
範圍就是 B2
到 F31
:
=BYROW(B2:F31,
再來是 LAMBDA
。我們要讓 LAMBDA
運算每列,所以用「row
」作為代號:
=BYROW(B2:F31,
LAMBDA(row,
(因為想到等等的 LAMBDA
可能會寫很長,就先斷行了。你可以用 Ctrl/Cmd
+ Enter
在算式間斷行)
我們要對每列成績做多條件判斷,且需要顧慮到有兩者皆非的可能性,所以先寫 IFNA
跟 IFS
:
=BYROW(B2:F31,
LAMBDA(row, IFNA(IFS(
到這裡就可以開始寫條件了:
翻譯成算式,就會像這樣:
=BYROW(B2:F31,
LAMBDA(row, IFNA(IFS(AVERAGE(row) > 80, "勤學徽章",
AND(AVERAGE(row) < 60, MAX(row) < 60), "加油徽章"))))
我們在 G2
執行看看:
完成!
這種利用 IFS
和 AND
和 OR
配合、篩選分類數據的方法,也是另一個 BYROW
跟 BYCOL
的常用場景,可以跨過 ArrayFormula
對特定函式無法套用的障礙。
在做數據分析的時候,我們往往見到比較「長」的表格,也就是列數較多、欄數較少的表格,所以實務上我比較常用 BYROW
來解決這類批次聚集運算、或是分類數據的問題。BYCOL
在「寬」表格當然也很好用,把 BYROW
學會了,你就可以輕鬆學會 BYCOL
!
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!