Chapter 11. 函式 (六):陣列與陣列函式 › 11.4 陣列統計與篩選
11.4 陣列統計與篩選
在第 6.5~6.7、7.7 節有介紹到統計與篩選的各項相關函式,而在本節將進一步介紹四個相關的函式,用途與先前介紹的函式不同。
- FREQUENCY:計算資料的各級距出現的次數
語法 | FREQUENCY (資料, 級距) |
輸入 |
|
輸出 | 資料 值在各 級距 的次數,共會有 級距 + 1 列輸出。各 級距 為該級距的上限值,例如 =FREQUENCY(資料,{30,40}) 輸出的三列分別代表 x ≤ 30、30 < x ≤ 40、x > 40。 |
- ARRAY_CONSTRAIN:輸出陣列或範圍的前幾列、前幾欄
語法 | ARRAY_CONSTRAIN (輸入範圍, 列數, 欄數) |
輸入 |
|
輸出 | 輸入範圍 的前 列數 列、前 欄數 欄。 |
- CHOOSECOLS / CHOOSEROWS:在資料中選取特定的欄 / 列
語法 | CHOOSECOLS / CHOOSEROWS (陣列, [資料欄/列_1, 資料欄/列_2,...]) |
輸入 |
|
輸出 | 陣列 的第 資料欄/列_n 欄 / 列的資料,會依照 資料欄/列_n 的順序輸出。 |
以下使用第 1 章的會員資料檔並搭配兩個基本範例、兩個進階範例說明各函式的用法,而為了方便說明在此進行以下設定:
- 將所有交易記錄檔的各欄位使用已命名範圍命名成表頭名稱。
- 將 A:I 命名為「會員資料」、第 1 列命名為「會員資料表頭」。
- 將會員卡號的格式設定為自動 (數字)。
- 統計會員年齡分布情形,以 30、40、50、60 歲分成五個級距
公式
=FREQUENCY(年齡,{30,40,50,60})
解說
{30,40,50,60} 可以隨意調動順序,FRQUENCY 會自動調整為遞增排序。
- 取得前 3 列會員資料
公式
- =ARRAY_CONSTRAIN(會員資料,3,COLUMNS(會員資料))
- =CHOOSEROWS(會員資料,1,2,3)
解說
- 因為要輸出前 n 列,可使用 ARRAY_CONSTRAIN 完成,但需要同時指定列數與欄數,在此可使用 COLUMNS 便能輸出所有欄。
- 若不是前 n 列的話,一般來說使用 CHOOSEROWS 比較方便易懂。
- 取得會員卡號 1902、2010、2181 的會員資料並加上標題列
公式
=CHOOSEROWS(會員資料,1,ARRAYFORMULA(MATCH( {1902,2010,2181},會員卡號,0)))
解說
本範例較複雜,以下分成多個步驟說明:
- 要取得特定列,可使用 CHOOSEROWS,特定列包括標題列 (第一列)、三位會員所在的位置列,即 =CHOOSEROWS(會員資料,1,...)。
- 要取得三位會員所在的位置,可以使用 MATCH(...,會員卡號,0) 完成,可使用三次 MATCH 完成,或使用陣列加上 ARRAYFORMULA,在此使用後者,即 ARRAYFORMULA(MATCH({"1902","2010","2181"},會員卡號,0))。
- 將 ARRAYFORMULA(...) 放至 CHOOSEROWS 中即可。
- 取得會員卡號 1902、2010、2181 的生日、年齡、近兩年消費總金額並加上標題列
公式
- =CHOOSEROWS({生日,年齡,近兩年消費總金額},1,ARRAYFORMULA(
MATCH({1902,2010,2181},會員卡號,0))) - =CHOOSECOLS(CHOOSEROWS(會員資料,1,ARRAYFORMULA(
MATCH({1902,2010,2181},會員卡號,0))),ARRAYFORMULA(
MATCH({"生日","年齡","近兩年消費總金額"},會員資料表頭,0)))
解說
本範例延續上例,變成只輸入特定欄位,有以下兩種做法:
- 將 CHOOSEROWS 的 陣列 改成指定的欄位即可,即 {生日,年齡,近兩年消費總金額}。
- 在 CHOOSEROWS 外面包一層 CHOOSECOLS,並一樣使用 MATCH 搜尋要輸出的欄位內容,即 ARRAYFORMULA(MATCH({"生日","年齡",
"近兩年消費總金額"},會員資料表頭,0))。
兩種方式各有優劣,第一種方式適用於輸出固定的欄位或有已命名範圍時,第二種方式可以將陣列轉換成儲存格,便能輕鬆的轉換要輸出的欄位。
- =CHOOSEROWS({生日,年齡,近兩年消費總金額},1,ARRAYFORMULA(
經過本章的介紹後,感覺 Google Sheets 的函式越來越複雜是非常正常的,實務上的狀況往往更加複雜,而下一章我們將進一步介紹臧定義函數,將常用的公式進一步包裝。