LAMBDA 函式(二):MAKEARRAY

2024/04/09閱讀時間約 6 分鐘

我們馬上來介紹 LAMBDA 函式的第一個輔助函式 MAKEARRAY

把「make array」直翻是「製作陣列」的意思,更具體地來說,它可以讓我們建立指定欄數與列數的範圍,裡面由 LAMBDA 的運算指定這個範圍裡面的值

比如說,我們可以用 MAKEARRAY 做一張隨機亂數表:

raw-image

做一張隨機人員清單:

raw-image

也可以做一張九九乘法表:

raw-image

這就是 MAKEARRAY 的效果!

好奇怎麼做的話,練習用的試算表在這邊,歡迎複製一份來玩玩看。我們開始囉!



MAKEARRAY 語法

=MAKEARRAY(列數, 欄數, LAMBDA)
  • 列數:輸出結果的列數。
  • 欄數:輸出結果的欄數。
  • LAMBDA:這邊寫你想要 MAKEARRAY 套用的 LAMBDA 函式,在這邊要包括已命名函式也沒問題。

MAKEARRAY 這邊要提供指定的列數與欄數,參數會與 MAKEARRAY 寫的列與欄相對應。我通常會在這寫英文字母的 rowcol,分別代表 row(列)跟 column(欄)。舉例來說,我想要寫一個 5 列 3 欄的結果,那麼就是:

=MAKEARRAY(5, 3, LAMBDA(row, col, 想寫的自訂算式))

複習一下上次提到的輔助函式與後面 LAMBDA 參數的關係:


raw-image

所以以上面的例子來看,我們在 MAKEARRAY 寫的 5 就會對應到後面的 row,3 就會對應到後面的 col 囉。




隨機亂數表

先從簡單的例子開始吧!我想做一張 10 列 5 欄的隨機亂數表,讓它可以隨機顯示 1 到 100 的數字:

raw-image

先釐清一下我們需要什麼:

  • 列:10
  • 欄:5
  • LAMBDA:要包含之前的列跟欄的參數,代表要處理的列數與欄數,然後寫下 RANDBETWEEN 函式讓它產生 1 到 100 的亂數。

所以我們在 MAKEARRAY 設下的 10 跟 5,就對應到後面的 row 跟 col,也就是:

  • 10 → row
  • 5 → column


好,我們在 A2 這邊寫下:

=MAKEARRAY(10, 5, LAMBDA(row, col, RANDBETWEEN(1, 100)))
raw-image

輕鬆按下 Enter,來看看結果:

raw-image

這樣就做出來了!接下來只要編輯工作表的任何地方,上面的數字就會隨機跳動。如果你不希望這樣,可以把表全選起來,複製後貼上值(Ctrl/Cmd + Shift + V)。


另外,如果沒有打算用 LAMBDA 來處理的話,也可以用產生隨機亂數陣列的 RANDARRAY 來做,可惜因為它只能指定 0 到 1 的亂數,我們要換個想法:

=ArrayFormula(ROUND(RANDARRAY(10, 5) * 100))
  • RANDARRAY:產生出 10 列 5 欄的亂數陣列,其陣列的數值介於 0 之 1 之間,之後再將這個值乘以 100。
  • ROUND:取約數,把小數點捨去做四捨五入。
  • 最後用 ArrayFormula 把運算套用到陣列上。

我把這個做法放在練習題的右手邊,你可以參考看看。




隨機人員清單

接下來我們試著做一張隨機人員名單。

我們想要讓 MAKEARRAY 可以按照 G 欄的人員,隨機產生一個 8 列 6 欄的清單:

raw-image

我們試著釐清現在需求有哪些:

  • 列:8
  • 欄:6
  • LAMBDA:要包含之前的列跟欄的參數,代表要處理的列數與欄數。

我想到的 LAMBDA 寫法是:

  1. 先用 COUNTA 算出名單共有多少人
  2. 再用 RANDBETWEEN 函式產生 1 到人員數量(從第一步得到)的亂數
  3. 把這個亂數傳給 INDEX 函式,讓它去選 G 欄的其中一格,這樣就會隨機取得人員了。

也就是:

LAMBDA(row, col, INDEX(G2:G, RANDBETWEEN(1, COUNTA(G2:G))))


導到這步,我們就可以跟 MAKEARRAY 拼裝起來了!

一樣在 A2 寫下:

=MAKEARRAY(8, 6, LAMBDA(row, col, INDEX(G2:G, RANDBETWEEN(1, COUNTA(G2:G)))))

颯爽按下 Enter 鍵,就會得到:

raw-image

搞定!


如果名單有刪減,也可以順利對應!我在 G 欄新增了「喜喜」,左手邊的表格也出現了新資料:

raw-image




九九乘法表

最後,我們來做做看九九乘法表:

raw-image

九九乘法有 9 列 9 欄,然後我們想要讓文字呈現像是「列的數字 x 欄的數字 = 列跟欄的乘積(兩數相乘的結果)」,像是:

1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
...


不過這邊有個小問題,在做相乘的時候,怎麼知道列的數字跟欄的數字是多少?

如果你的 LAMBDA 寫的值沒有做什麼處理,它 MAKEARRAY 的預設值就是從 1 開始。我們可以想像寫 MAKEARRAY 的儲存格位置的左方跟上方有這樣的「座標」:

raw-image

而九九乘法表,就是拿列的值跟欄的值相乘:

raw-image

那做到這步,我們來釐清一下需求:

  • 列:9
  • 欄:9
  • LAMBDA:列的數字 & 乘號 & 欄的數字 & 等號 & 列的數字與欄的數字的乘積

也就是:

LAMBDA(row & " x " & col & " = " & row * col)


好!來試著把它跟 MAKEARRAY 拼裝起來:

=MAKEARRAY(9, 9, LAMBDA(row, col, row & " x " & col & " = " & row * col))

愉快按下 Enter,看看結果:

raw-image

這樣就完成囉!

希望透過這些練習有讓你對 MAKEARRAY 有一些了解。




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

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

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

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



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