跳到主要內容跳到頁尾

TOROW、TOCOL、WRAPROWS、WRAPCOLS:攤平與重新排列資料

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

把二維表格攤平成單列或單欄的 TOROW、TOCOL,以及把一長串名單切成每列或每欄固定個數的 WRAPROWS、WRAPCOLS。附 ignore、scan_by_column、pad_with 的用法,最後用座位表當實例。

發布 更新

文章目錄

手上有一長串名單,我想排成每列 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,有些格子是空白的:

台北店台中店高雄店
378
11229
1453

重排用的是 A1:A12 這一欄名單,A1 是標題「國家」,A2:A12 共 11 個:台灣、印尼、韓國、新加坡、日本、菲律賓、越南、泰國、馬來西亞、澳洲、紐西蘭。

攤平

TOROW

把陣列或範圍裡的值攤平成單一列。

語法:

  • 陣列或範圍:要攤平的資料。
  • 忽略:選填,要略過哪些格子。0 全部保留,不寫就是這個;1 略過空白;2 略過錯誤值;3 兩種都略過。
  • 依欄掃描:選填,TRUE 或 FALSE。預設 FALSE,一列一列由左到右讀;TRUE 則一欄一欄由上到下讀。

我想把銷量表裡有數字的格子全部抓成一列,空白的不要:

Google 試算表公式
fx

攤平成一列,略過空白

=TOROW(A2:C4, 1)

來看看結果:

EFGHIJ
378112291453

順序是先讀完第 2 列的 37、8,再讀第 3 列的 112、29,最後第 4 列的 14、53。如果想一欄一欄讀,第三個參數給 TRUE,就會變成 37、112、8、14、29、53。

TOCOL

跟 TOROW 一樣,只是攤平成單一欄。

語法:

參數的意義與 TOROW 完全相同。

我想要把同一張表按欄的順序攤成一欄,空白略過:

Google 試算表公式
fx

攤平成一欄,略過空白,依欄掃描

=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 輸入:

Google 試算表公式
fx

略過空白,按列掃描後保留第一次出現的品項

=UNIQUE(TOCOL(A2:B3, 1, FALSE))

結果是一欄紅茶、青茶、奶茶。先攤平才能把兩欄當成同一份名單去重;直接對二維表 UNIQUE 是比較整列,意義不同。

這裡用 1 只略過空白,沒有順便吞掉錯誤。改成 3 會連錯誤一起略過,清單變乾淨不等於來源正確;應先追查錯誤、記錄缺漏再決定是否排除。掃描方向也會影響第一次出現的順序,不能把這份結果當自動字母排序。

重排

WRAPROWS

把單一列或單一欄的資料,切成每列固定個數,一列一列由左到右填滿。

語法:

  • 範圍:必須是單一列或單一欄。
  • 每列個數:每一列要放幾個。如果不是整數,會無條件捨去。
  • 補值:選填。最後一列放不滿的時候,用這個值補。不填的話補 #N/A。

我想把 11 個國家排成每列 5 個:

Google 試算表公式
fx

11 個國家排成每列 5 個

=WRAPROWS(A2:A12, 5)
EFGHI
台灣印尼韓國新加坡日本
菲律賓越南泰國馬來西亞澳洲
紐西蘭#N/A#N/A#N/A#N/A

11 不是 5 的倍數,所以最後一列後四格就補了 #N/A。補值只要加第三個參數:

Google 試算表公式
fx

不足的格子補「空位」

=WRAPROWS(A2:A12, 5, "空位")

最後一列就會變成「紐西蘭」加四個「空位」。

WRAPCOLS

跟 WRAPROWS 方向相反:切成每欄固定個數,一欄一欄由上到下填滿。

語法:

  • 每欄個數:每一欄要放幾個,其他參數與 WRAPROWS 相同。
Google 試算表公式
fx

11 個國家排成每欄 4 個,補空位

=WRAPCOLS(A2:A12, 4, "空位")
EFG
台灣日本馬來西亞
印尼菲律賓澳洲
韓國越南紐西蘭
新加坡泰國空位

兩個 WRAP 的差別只在先填哪個方向。座位表如果是教室那種由左到右點名,用 WRAPROWS;像報表那樣一欄一欄往下讀,用 WRAPCOLS。

實例:把兩批名單排成座位表

名單分成兩批報名,第一批放在 A2:A7,第二批放在 B2:B7,B 欄有些空白,我想合併後排成每列 4 個的座位表:

第一批第二批
台灣馬來西亞
印尼澳洲
韓國
新加坡
日本紐西蘭
菲律賓越南

分兩步:先用 TOCOL 把兩欄攤成一欄並略過空白,再用 WRAPROWS 切成每列 4 個。

Google 試算表公式
fx

兩批名單合併,每列 4 個,不足補空位

=WRAPROWS(TOCOL(A2:B7, 1), 4, "空位")

來看看結果:

EFGH
台灣馬來西亞印尼澳洲
韓國新加坡日本紐西蘭
菲律賓越南空位空位

TOCOL 預設是一列一列讀,所以台灣後面接的是同一列的馬來西亞。想讓第一批全部排在前面,把 TOCOL 的第三個參數改成 TRUE 就行。

名單新增的話,把範圍拉長就好,試著用用看吧!

分享:
#TOROW#TOCOL#WRAPROWS#WRAPCOLS#陣列
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

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

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

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

免費,隨時可取消。

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