手上有一長串名單,我想排成每列 5 個的座位表,或是反過來,一張散落著空白格的二維表格,想把有值的格子全部抓成一欄,這時候就用 WRAPROWS、TOCOL 這幾個函式。
這四個函式跟 VSTACK、CHOOSECOLS 一樣,是 2023 年初(2 月起陸續開放,3 月中全數開放)加進 Google 試算表的陣列函式。以前要做同樣的事得靠 FLATTEN 或是 INDEX 配 SEQUENCE 硬湊,現在一行公式就能搞定。
用 Excel 的人:TOROW、TOCOL、WRAPROWS、WRAPCOLS 在 Excel 365 有同名函式,TOROW、TOCOL 在 Excel 2024 也有;Excel 2021 以前沒有。FLATTEN 則是 Google 試算表才有的函式。
坦白說,TOROW 跟 TOCOL 我用得比較多,WRAPROWS 跟 WRAPCOLS 大概是要排座位表、排值日生的時候才會想到。
怎麼選
| 我想要 | 用這個 |
|---|---|
| 把表格攤平成一整列 | TOROW |
| 把表格攤平成一整欄 | TOCOL |
| 把一列或一欄的資料,切成每列固定個數,由左到右填 | WRAPROWS |
| 把一列或一欄的資料,切成每欄固定個數,由上到下填 | WRAPCOLS |
簡單來說,TO 開頭的是「變成一條」,WRAP 開頭的是「從一條變成一塊」。後面的例子分別用兩份資料,公式都放在 E1,結果會從 E1 往右、往下展開,下面結果表的 E、F、G 是欄名。
攤平用的是這張銷量表,放在 A1:C4,有些格子是空白的:
| 台北店 | 台中店 | 高雄店 |
|---|---|---|
| 37 | 8 | |
| 112 | 29 | |
| 14 | 53 |
重排用的是 A1:A12 這一欄名單,A1 是標題「國家」,A2:A12 共 11 個:台灣、印尼、韓國、新加坡、日本、菲律賓、越南、泰國、馬來西亞、澳洲、紐西蘭。
攤平
TOROW
把陣列或範圍裡的值攤平成單一列。
語法:
- 陣列或範圍:要攤平的資料。
- 忽略:選填,要略過哪些格子。0 全部保留,不寫就是這個;1 略過空白;2 略過錯誤值;3 兩種都略過。
- 依欄掃描:選填,
TRUE或FALSE。預設FALSE,一列一列由左到右讀;TRUE則一欄一欄由上到下讀。
我想把銷量表裡有數字的格子全部抓成一列,空白的不要:
攤平成一列,略過空白
=TOROW(A2:C4, 1)來看看結果:
| E | F | G | H | I | J |
|---|---|---|---|---|---|
| 37 | 8 | 112 | 29 | 14 | 53 |
順序是先讀完第 2 列的 37、8,再讀第 3 列的 112、29,最後第 4 列的 14、53。如果想一欄一欄讀,第三個參數給 TRUE,就會變成 37、112、8、14、29、53。
TOCOL
跟 TOROW 一樣,只是攤平成單一欄。
語法:
參數的意義與 TOROW 完全相同。
我想要把同一張表按欄的順序攤成一欄,空白略過:
攤平成一欄,略過空白,依欄掃描
=TOCOL(A2:C4, 1, TRUE)| E |
|---|
| 37 |
| 112 |
| 8 |
| 14 |
| 29 |
| 53 |
先讀台北店那一欄的 37、112,接著台中店的 8、14,最後高雄店的 29、53。
要注意的是忽略參數不寫的時候是 0,空白格的位置會留在結果裡,所以結果會有空白的儲存格夾在數字中間,一般我都會習慣先寫 1。
多欄名單攤平後,再取唯一值
方格子 TOCOL 舊文有個很好用的組合:先攤平,再 UNIQUE。另開空白表,A2:B3 放兩列「紅茶、青茶」「青茶、奶茶」,D2 輸入:
略過空白,按列掃描後保留第一次出現的品項
=UNIQUE(TOCOL(A2:B3, 1, FALSE))結果是一欄紅茶、青茶、奶茶。先攤平才能把兩欄當成同一份名單去重;直接對二維表 UNIQUE 是比較整列,意義不同。
這裡用 1 只略過空白,沒有順便吞掉錯誤。改成 3 會連錯誤一起略過,清單變乾淨不等於來源正確;應先追查錯誤、記錄缺漏再決定是否排除。掃描方向也會影響第一次出現的順序,不能把這份結果當自動字母排序。
重排
WRAPROWS
把單一列或單一欄的資料,切成每列固定個數,一列一列由左到右填滿。
語法:
- 範圍:必須是單一列或單一欄。
- 每列個數:每一列要放幾個。如果不是整數,會無條件捨去。
- 補值:選填。最後一列放不滿的時候,用這個值補。不填的話補
#N/A。
我想把 11 個國家排成每列 5 個:
11 個國家排成每列 5 個
=WRAPROWS(A2:A12, 5)| E | F | G | H | I |
|---|---|---|---|---|
| 台灣 | 印尼 | 韓國 | 新加坡 | 日本 |
| 菲律賓 | 越南 | 泰國 | 馬來西亞 | 澳洲 |
| 紐西蘭 | #N/A | #N/A | #N/A | #N/A |
11 不是 5 的倍數,所以最後一列後四格就補了 #N/A。補值只要加第三個參數:
不足的格子補「空位」
=WRAPROWS(A2:A12, 5, "空位")最後一列就會變成「紐西蘭」加四個「空位」。
WRAPCOLS
跟 WRAPROWS 方向相反:切成每欄固定個數,一欄一欄由上到下填滿。
語法:
- 每欄個數:每一欄要放幾個,其他參數與
WRAPROWS相同。
11 個國家排成每欄 4 個,補空位
=WRAPCOLS(A2:A12, 4, "空位")| E | F | G |
|---|---|---|
| 台灣 | 日本 | 馬來西亞 |
| 印尼 | 菲律賓 | 澳洲 |
| 韓國 | 越南 | 紐西蘭 |
| 新加坡 | 泰國 | 空位 |
兩個 WRAP 的差別只在先填哪個方向。座位表如果是教室那種由左到右點名,用 WRAPROWS;像報表那樣一欄一欄往下讀,用 WRAPCOLS。
實例:把兩批名單排成座位表
名單分成兩批報名,第一批放在 A2:A7,第二批放在 B2:B7,B 欄有些空白,我想合併後排成每列 4 個的座位表:
| 第一批 | 第二批 |
|---|---|
| 台灣 | 馬來西亞 |
| 印尼 | 澳洲 |
| 韓國 | |
| 新加坡 | |
| 日本 | 紐西蘭 |
| 菲律賓 | 越南 |
分兩步:先用 TOCOL 把兩欄攤成一欄並略過空白,再用 WRAPROWS 切成每列 4 個。
兩批名單合併,每列 4 個,不足補空位
=WRAPROWS(TOCOL(A2:B7, 1), 4, "空位")來看看結果:
| E | F | G | H |
|---|---|---|---|
| 台灣 | 馬來西亞 | 印尼 | 澳洲 |
| 韓國 | 新加坡 | 日本 | 紐西蘭 |
| 菲律賓 | 越南 | 空位 | 空位 |
TOCOL 預設是一列一列讀,所以台灣後面接的是同一列的馬來西亞。想讓第一批全部排在前面,把 TOCOL 的第三個參數改成 TRUE 就行。
名單新增的話,把範圍拉長就好,試著用用看吧!
接下來可以
相關文章
查看所有文章留言討論
共 0 則留言
