Chapter 11. 函式 (六):陣列與陣列函式11.4 陣列統計與篩選

11.4 陣列統計與篩選


第 6.5~6.77.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 欄 / 列的資料,會依照 資料欄/列_n 的順序輸出。

以下使用第 1 章的會員資料檔並搭配兩個基本範例、兩個進階範例說明各函式的用法,而為了方便說明在此進行以下設定:

  • 將所有交易記錄檔的各欄位使用已命名範圍命名成表頭名稱。
  • 將 A:I 命名為「會員資料」、第 1 列命名為「會員資料表頭」。
  • 將會員卡號的格式設定為自動 (數字)。
  1. 統計會員年齡分布情形,以 30、40、50、60 歲分成五個級距

    公式

    =FREQUENCY(年齡,{30,40,50,60})

    解說

    {30,40,50,60} 可以隨意調動順序,FRQUENCY 會自動調整為遞增排序。


  1. 取得前 3 列會員資料

    公式

    • =ARRAY_CONSTRAIN(會員資料,3,COLUMNS(會員資料))
    • =CHOOSEROWS(會員資料,1,2,3)

    解說

    • 因為要輸出前 n 列,可使用 ARRAY_CONSTRAIN 完成,但需要同時指定列數與欄數,在此可使用 COLUMNS 便能輸出所有欄。
    • 若不是前 n 列的話,一般來說使用 CHOOSEROWS 比較方便易懂。
  2. 取得會員卡號 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 中即可。
  3. 取得會員卡號 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))。

    兩種方式各有優劣,第一種方式適用於輸出固定的欄位或有已命名範圍時,第二種方式可以將陣列轉換成儲存格,便能輕鬆的轉換要輸出的欄位。

經過本章的介紹後,感覺 Google Sheets 的函式越來越複雜是非常正常的,實務上的狀況往往更加複雜,而下一章我們將進一步介紹臧定義函數,將常用的公式進一步包裝。