兩間分店各自記了一張銷量表,月底我想把它們疊成一張來比較,或是一張十幾欄的報表只想留下其中兩欄,這時候就輪到 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:
| 品項 | 杯數 | 單價 | 金額 |
|---|---|---|---|
| 蘋果紅茶 | 37 | 45 | 1665 |
| 青茶 | 8 | 40 | 320 |
| 蘋果綠茶 | 112 | 50 | 5600 |
| 品項 | 杯數 | 單價 | 金額 |
|---|---|---|---|
| 蘋果紅茶 | 53 | 42 | 2226 |
| 鐵觀音 | 14 | 55 | 770 |
| 蘋果綠茶 | 29 | 48 | 1392 |
堆疊
VSTACK
把多個範圍由上到下依序接起來,變成一個更大的陣列。
語法:
- 範圍1:第一個要接的範圍。
- 範圍2 之後:選填,可以一直加下去。
我想把兩間分店疊成一張表,標題列只留一份。第一個範圍連標題一起拿,第二個範圍從第 2 列開始:
兩間分店疊成一張表
=VSTACK(A1:D4, F2:I4)來看看結果:
| 品項 | 杯數 | 單價 | 金額 |
|---|---|---|---|
| 蘋果紅茶 | 37 | 45 | 1665 |
| 青茶 | 8 | 40 | 320 |
| 蘋果綠茶 | 112 | 50 | 5600 |
| 蘋果紅茶 | 53 | 42 | 2226 |
| 鐵觀音 | 14 | 55 | 770 |
| 蘋果綠茶 | 29 | 48 | 1392 |
要注意欄數對不起來的情況。如果第二個範圍只有 3 欄,缺的那一欄會補 #N/A,例如 的第 3、4 列第 4 欄就是 #N/A。這時候可以外面包 IFERROR 把它藏起來,不過先確認兩張表的欄位真的對得上比較重要。
HSTACK
把多個範圍由左到右依序接起來。
語法:
- 範圍1、範圍2 之後:跟
VSTACK一樣,第一個必填,後面選填。
我想把台北店的品項,跟台中店的金額併在同一張小表。這個例子故意挑了會出事的組合:
台北店品項加台中店金額
=HSTACK(A1:A4, I1:I4)| 品項 | 金額 |
|---|---|
| 蘋果紅茶 | 2226 |
| 青茶 | 770 |
| 蘋果綠茶 | 1392 |
結果的第 1 列是標題,「品項」來自 A1,「金額」來自 I1,因為我兩個範圍都從第 1 列開始。
這是一個很典型的陷阱:HSTACK 只管照列號左右貼,不管兩邊的品項是不是同一個。結果裡「青茶」旁邊的 770 其實是台中店鐵觀音的金額。兩邊列的對應是你自己要負責的,品項順序不同就要先用 SORT 或 XLOOKUP 對好。
挑選
CHOOSECOLS
從範圍裡挑出指定的欄,欄的順序由你決定。
語法:
- 範圍:資料來源。
- 欄號:這個範圍裡的第幾欄,從 1 算起,是範圍內的相對位置,不是試算表的 A、B、C。可以寫負數,從最後一欄倒數,-1 是最後一欄。
我只想留下品項跟金額:
只留品項與金額
=CHOOSECOLS(A1:D4, 1, 4)| 品項 | 金額 |
|---|---|
| 蘋果紅茶 | 1665 |
| 青茶 | 320 |
| 蘋果綠茶 | 5600 |
欄號的順序就是結果的順序,所以 會把金額放在前面、品項放後面。也可以同一欄寫兩次。
CHOOSEROWS
從範圍裡挑出指定的列,列的順序由你決定。
語法:
- 範圍:資料來源。
- 列號:這個範圍裡的第幾列,一樣從 1 算起、可以寫負數。
我想拿標題列加最後一列:
標題列加最後一列
=CHOOSEROWS(A1:D4, 1, -1)| 品項 | 杯數 | 單價 | 金額 |
|---|---|---|---|
| 蘋果綠茶 | 112 | 50 | 5600 |
第 1 列是標題、-1 是最後一列,所以結果是標題在上、蘋果綠茶在下。-1 指的是傳入範圍的最後一列;這裡範圍固定在 A1:D4,因此新增到第 5 列不會自動納入,也不能保證是日期最新的紀錄。增加資料後要更新來源範圍,或先建立會延伸且排好日期的來源,再取最後一列。
實例:兩間分店合併後排名
最後做一個完整的題目:把兩間分店疊起來,只留下品項跟金額,再依金額由大到小排。
分三步,由內往外:
VSTACK(A2:D4, F2:I4)把兩張表的資料列疊起來,標題我手動另外打。CHOOSECOLS(…, 1, 4)只留下第 1 欄品項與第 4 欄金額。SORT(…, 2, FALSE)依第 2 欄由大到小排,FALSE就是降序。Excel 的SORT第三個參數(sort_order)只接受1(升冪)與-1(降冪),要降序得寫成SORT(…, 2, -1),把這條公式原封不動貼到 Excel 會出錯。
寫成一條:
合併兩間分店,留品項與金額,依金額降序
=SORT(CHOOSECOLS(VSTACK(A2:D4, F2:I4), 1, 4), 2, FALSE)標題是我另外手動打在上一列的,公式的結果從它下面開始。來看看結果:
| 品項 | 金額 |
|---|---|
| 蘋果綠茶 | 5600 |
| 蘋果紅茶 | 2226 |
| 蘋果紅茶 | 1665 |
| 蘋果綠茶 | 1392 |
| 鐵觀音 | 770 |
| 青茶 | 320 |
同一個品項會出現兩次,因為還沒有合併。想把它按品項加總的話,下一步交給 QUERY 或樞紐分析表就行了。
四個函式大概就是這樣,需要的時候回來查一下吧!
接下來可以
相關文章
查看所有文章留言討論
共 0 則留言
