今天要整理四個會「憑空生出數字」的函式:RAND、RANDBETWEEN、RANDARRAY 負責亂數,SEQUENCE 負責 1、2、3 這種規律的數列。
我最常用的情境是抽籤、分組前先洗牌,還有想快速生一串編號或日期序列的時候。亂數類的函式有一個大家都會踩到的特性:結果每次都會變,所以這篇會專門講怎麼把它固定下來。
怎麼選
| 想要什麼 | 用哪個 | 一次幾格 |
|---|---|---|
| 0 到 1 之間的小數 | RAND | 1 格 |
| 兩個整數之間的整數,頭尾都有可能 | RANDBETWEEN | 1 格 |
| 一整塊亂數小數 | RANDARRAY | 指定列數與欄數 |
| 1、2、3⋯⋯或 10、8、6⋯⋯ | SEQUENCE | 指定列數與欄數 |
亂數每次都會變
先講最重要的事。RAND 跟 RANDBETWEEN 算出來的值,會在試算表重新計算的時候換一組新的。官方說明中提到會重新計算的函式,舉的例子是 TODAY、NOW、RAND、RANDBETWEEN,我不把它寫成完整清單。
實際上的感覺是:你改了任何一個儲存格、或是重新開啟檔案,亂數就換掉了(這是預設的自動計算;如果在「檔案 > 設定 > 計算」改成手動計算,要按「計算」才會重算,亂數不會自己變)。所以文章裡我沒辦法告訴你「會得到某某數字」,只能寫它的範圍,你自己的結果會跟我的不一樣,這是正常的。
如果抽出來的結果要留著(抽籤結果、分組名單),就要把公式換成固定的值:
- 選取那些含亂數公式的儲存格,複製(Windows 按 Ctrl+C,Mac 按 Cmd+C)。
- 在同一個位置貼上「值」:Windows 按 Ctrl+Shift+V,Mac 按 Cmd+Shift+V(在 Chrome 上)。
如果用的是 RANDARRAY 或下面的 SORT 洗牌這類展開成多格的公式,公式其實只在左上角那一格,要選取整塊展開的結果(例如 A2:A6)再貼上值,只選左上角那格的話,其餘展開的格子會消失。
貼上之後格子裡就是普通的數字,不會再跟著變了。公式就沒了,想要重抽的話得再寫一次,這個取捨要先想好。
亂數
RAND
傳回 0 到 1 之間的亂數,含 0 但不含 1。
語法:
沒有參數,括號要留著。
產生 0 到 1 之間的亂數
=RAND()每次的結果都不同,例如 0.4821⋯⋯,我們只能確定它大於等於 0、小於 1。想要別的範圍,乘上範圍大小再加起點: 會落在 5 到 15 之間(含 5,不含 15)。
RANDBETWEEN
傳回兩個值之間的整數亂數,頭尾都包含在內。
語法:
- 最小值、最大值:都是整數,且都有可能被抽到。
擲一顆骰子
=RANDBETWEEN(1, 6)結果會是 1、2、3、4、5、6 其中一個,每個機率一樣。
抽籤是我最常拿它做的事。A2:A6 放 5 個品項,要隨機抽出一個:
從 A2:A6 隨機抽一個品項
=INDEX(A2:A6, RANDBETWEEN(1, ROWS(A2:A6)))ROWS 會算出範圍有幾列,這樣之後品項增減,只要範圍跟著改就好,不用去改 5。ROWS 在 列與欄函式 有說明。
RANDARRAY
一次產生一整塊 0 到 1 之間的亂數。
語法:
- 列數、欄數:想要的陣列大小。
產生 3 列 2 欄的亂數
=RANDARRAY(3, 2)公式會從輸入的格子往下、往右展開成 3 × 2 共 6 格,每格都是 0 到 1 之間。展開的格子要是空的,不然會出現 #REF!。Excel 2021、2024 與 365 也有 RANDARRAY,而且多了最小值、最大值與是否只傳回整數的參數;Google 試算表只有列數與欄數。
RANDARRAY 最好用的地方是洗牌。想把 A2:A6 的順序打亂,可以讓每個品項配一個亂數,再依亂數排序(公式要放在 A2:A6 以外的空白處,例如 C2,否則會變成循環參照):
依亂數排序,把 A2:A6 隨機洗牌
=SORT(A2:A6, RANDARRAY(ROWS(A2:A6)), TRUE)每次重新計算,順序都會換一次,每個品項只會出現一次。分組、排值日表的時候很好用,記得洗完要貼上值。
序列
SEQUENCE
產生規律的數列。
語法:
- 列數:要幾列。
- 欄數:選填,要幾欄,不填是 1。
- 起始值:選填,不填是 1。
- 間隔:選填,每個數字之間差多少,不填是 1。
產生 1 到 5
=SEQUENCE(5)會往下展開 1、2、3、4、5。
三個選填都用上的例子:
從 10 開始,每次減 2,共 5 列
=SEQUENCE(5, 1, 10, -2)結果是 10、8、6、4、2。間隔填負數就是倒數。
欄數大於 1 時,是先橫向填滿一列,再換下一列:
3 列 4 欄,從 1 開始
=SEQUENCE(3, 4)| 列 | E | F | G | H |
|---|---|---|---|---|
| 1 | 1 | 2 | 3 | 4 |
| 2 | 5 | 6 | 7 | 8 |
| 3 | 9 | 10 | 11 | 12 |
我個人最常用 SEQUENCE 來生流水號,比手動拉填滿控制點方便,之後資料增減也只要改一個數字。
亂數結果怎麼檢查
亂數的值每次不同,所以我檢查的是「性質」:數量有沒有對、有沒有落在範圍內。
檢查 E1:F3 的亂數數量與範圍
=AND(COUNT(E1:F3)=6, MIN(E1:F3)>=0, MAX(E1:F3)<1)公式放在別處,E1:F3 放 的結果,應該會得到 TRUE。不管重新計算幾次,這個答案都不會變。
來試著用用看吧!
我是喜特先生,Mr. Sheet,我們下個教學見!
接下來可以
相關文章
查看所有文章陣列思維:從一格一格算到一次算一整欄
用全班加 5 分的小例子,看一格一個公式和一個公式整欄展開差在哪,再認識縱向、橫向、二維陣列的形狀,以及展開結果被舊資料擋住時的
表單回覆表自動填滿:編號、單價、金額、狀態一次搞定
用 Google 表單收訂單時,在回覆工作表旁邊用 ARRAYFORMULA 自動產生編號、查價目表帶出單價、算金額,並用巢狀 IF 標出大單與待確認的列,新回覆進來不用再拖公式。
列與欄函式:ROW、COLUMN、ROWS、COLUMNS、ADDRESS 與 SHEET
ROW、COLUMN 傳回位置的編號,ROWS、COLUMNS 算範圍的大小,ADDRESS 把編號組回儲存格位址,SHEET 傳回工作表編號。附語法、流水號與找出最大值位址的例子。
留言討論
共 0 則留言
