跳到主要內容跳到頁尾

VSTACK、HSTACK、CHOOSEROWS、CHOOSECOLS:疊表格與挑欄列

5 分鐘閱讀Lv.3 中級摘要與日期

把兩張表上下疊起來的 VSTACK、左右併起來的 HSTACK,以及只留下指定列或欄的 CHOOSEROWS、CHOOSECOLS。附語法、負數索引與欄數不一致時的結果,最後用兩間分店的銷量表串起四個函式。

發布 更新

文章目錄

兩間分店各自記了一張銷量表,月底我想把它們疊成一張來比較,或是一張十幾欄的報表只想留下其中兩欄,這時候就輪到 VSTACK、HSTACK、CHOOSEROWS、CHOOSECOLS 上場了。

這四個函式都是 2023 年初(2 月起陸續開放,3 月中全數開放)跟著 TOROW、WRAPROWS 這一批新的陣列函式一起加進 Google 試算表的。舊文章教的做法是用 {A2:D4; F2:I4} 這種大括號硬疊,那個寫法仍然可用,只是 VSTACK 更好讀,可以改用。

用 Excel 的人:這四個函式在 Excel 365 與 Excel 2024 有同名函式,Excel 2021 以前沒有。VSTACK 兩邊欄數不一致時補 #N/A 的行為,Excel 與 Google 試算表相同。

我自己用得最多的是 VSTACK 跟 CHOOSECOLS,HSTACK 偶爾用,CHOOSEROWS 通常是要抓最後一列的時候才想起來。

怎麼選

我想要用這個
把幾個範圍上下接起來VSTACK
把幾個範圍左右接起來HSTACK
從範圍裡挑出指定的列,順序可以自己排CHOOSEROWS
從範圍裡挑出指定的欄,順序可以自己排CHOOSECOLS

四個函式的結果都會自動溢出到旁邊的儲存格,所以公式下方、右方要留空。接下來的例子都用這兩張分店表,台北店放在 A1:D4,台中店放在 F1:I4:

品項杯數單價金額
蘋果紅茶37451665
青茶840320
蘋果綠茶112505600
品項杯數單價金額
蘋果紅茶53422226
鐵觀音1455770
蘋果綠茶29481392

堆疊

VSTACK

把多個範圍由上到下依序接起來,變成一個更大的陣列。

語法:

  • 範圍1:第一個要接的範圍。
  • 範圍2 之後:選填,可以一直加下去。

我想把兩間分店疊成一張表,標題列只留一份。第一個範圍連標題一起拿,第二個範圍從第 2 列開始:

Google 試算表公式
fx

兩間分店疊成一張表

=VSTACK(A1:D4, F2:I4)

來看看結果:

品項杯數單價金額
蘋果紅茶37451665
青茶840320
蘋果綠茶112505600
蘋果紅茶53422226
鐵觀音1455770
蘋果綠茶29481392

要注意欄數對不起來的情況。如果第二個範圍只有 3 欄,缺的那一欄會補 #N/A,例如 的第 3、4 列第 4 欄就是 #N/A。這時候可以外面包 IFERROR 把它藏起來,不過先確認兩張表的欄位真的對得上比較重要。

HSTACK

把多個範圍由左到右依序接起來。

語法:

  • 範圍1、範圍2 之後:跟 VSTACK 一樣,第一個必填,後面選填。

我想把台北店的品項,跟台中店的金額併在同一張小表。這個例子故意挑了會出事的組合:

Google 試算表公式
fx

台北店品項加台中店金額

=HSTACK(A1:A4, I1:I4)
品項金額
蘋果紅茶2226
青茶770
蘋果綠茶1392

結果的第 1 列是標題,「品項」來自 A1,「金額」來自 I1,因為我兩個範圍都從第 1 列開始。

這是一個很典型的陷阱:HSTACK 只管照列號左右貼,不管兩邊的品項是不是同一個。結果裡「青茶」旁邊的 770 其實是台中店鐵觀音的金額。兩邊列的對應是你自己要負責的,品項順序不同就要先用 SORT 或 XLOOKUP 對好。

挑選

CHOOSECOLS

從範圍裡挑出指定的欄,欄的順序由你決定。

語法:

  • 範圍:資料來源。
  • 欄號:這個範圍裡的第幾欄,從 1 算起,是範圍內的相對位置,不是試算表的 A、B、C。可以寫負數,從最後一欄倒數,-1 是最後一欄。

我只想留下品項跟金額:

Google 試算表公式
fx

只留品項與金額

=CHOOSECOLS(A1:D4, 1, 4)
品項金額
蘋果紅茶1665
青茶320
蘋果綠茶5600

欄號的順序就是結果的順序,所以 會把金額放在前面、品項放後面。也可以同一欄寫兩次。

CHOOSEROWS

從範圍裡挑出指定的列,列的順序由你決定。

語法:

  • 範圍:資料來源。
  • 列號:這個範圍裡的第幾列,一樣從 1 算起、可以寫負數。

我想拿標題列加最後一列:

Google 試算表公式
fx

標題列加最後一列

=CHOOSEROWS(A1:D4, 1, -1)
品項杯數單價金額
蘋果綠茶112505600

第 1 列是標題、-1 是最後一列,所以結果是標題在上、蘋果綠茶在下。-1 指的是傳入範圍的最後一列;這裡範圍固定在 A1:D4,因此新增到第 5 列不會自動納入,也不能保證是日期最新的紀錄。增加資料後要更新來源範圍,或先建立會延伸且排好日期的來源,再取最後一列。

實例:兩間分店合併後排名

最後做一個完整的題目:把兩間分店疊起來,只留下品項跟金額,再依金額由大到小排。

分三步,由內往外:

  1. VSTACK(A2:D4, F2:I4) 把兩張表的資料列疊起來,標題我手動另外打。
  2. CHOOSECOLS(…, 1, 4) 只留下第 1 欄品項與第 4 欄金額。
  3. SORT(…, 2, FALSE) 依第 2 欄由大到小排,FALSE 就是降序。Excel 的 SORT 第三個參數(sort_order)只接受 1(升冪)與 -1(降冪),要降序得寫成 SORT(…, 2, -1),把這條公式原封不動貼到 Excel 會出錯。

寫成一條:

Google 試算表公式
fx

合併兩間分店,留品項與金額,依金額降序

=SORT(CHOOSECOLS(VSTACK(A2:D4, F2:I4), 1, 4), 2, FALSE)

標題是我另外手動打在上一列的,公式的結果從它下面開始。來看看結果:

品項金額
蘋果綠茶5600
蘋果紅茶2226
蘋果紅茶1665
蘋果綠茶1392
鐵觀音770
青茶320

同一個品項會出現兩次,因為還沒有合併。想把它按品項加總的話,下一步交給 QUERY 或樞紐分析表就行了。

四個函式大概就是這樣,需要的時候回來查一下吧!

分享:
#VSTACK#HSTACK#CHOOSECOLS#CHOOSEROWS#陣列
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。