跳到主要內容跳到頁尾

資料處理的步驟地圖:從各分店的原始資料做到一張報表

5 分鐘閱讀Lv.4 進階摘要與日期

兩間分店各自記訂單、品項還帶著多餘空格,要怎麼變成一張報表?這篇不教語法,只排出整合、清理、補欄位、檢查、彙總的順序,說明順序為什麼不能換,並指出每一步該看哪一篇。

發布 更新

文章目錄

月底了,台北和台中兩間分店各丟給我一份訂單表,我要做一張「每種茶賣了多少錢」的報表。兩份表欄位一樣,可是有一個品項在其中一份後面多了一格空白,查單價的時候就查不到。

這種事每個月都會來一次,所以我想把「從原始資料到報表」拆成固定的幾步,每一步知道用什麼、出錯時從哪裡回頭。這篇是步驟的地圖,語法不重講,每一步都連到專門的文章。

由上往下六個步驟:原始資料、整合、清理、補欄位、檢查、彙總,檢查有錯時回到清理← 左右滑動看完整的圖,點圖可放大

圖:六步由上往下走,第 5 步檢查到錯就回第 3 步,最後才做彙總。

先把原始資料放著不動

第 1 步其實不用做什麼,重點是不要碰它。各分店的訂單表原樣留著,後面所有步驟都另開分頁用公式處理,原始資料壞不了,公式寫錯了也能重來。這個分層的想法在 三層架構入門 講過。

另外,每份表最好是「一列一筆、一欄一屬性」,不然後面整合會卡住,見 一列一筆、一欄一屬性。

一份小資料走一遍

用最小的資料把六步走一次。台北在 A:B 欄,台中在 D:E 欄,價目表在 G:H 欄。台北那份的「青茶」後面多了一格空白,肉眼看不出來。先是台北的訂單(A1:B4):

品項杯數
蘋果紅茶7
青茶(尾端有空格)12
烏龍3

台中的訂單(D1:E3):

品項杯數
蘋果紅茶5
青茶9

價目表(G1:H4):

品項單價
蘋果紅茶45
青茶38
烏龍42

整合

先把兩份疊成一張。在 J1 寫:

Google 試算表公式
fx

把台北與台中疊成一張,標題列只留台北那一份

=VSTACK(A1:B4, D2:E3)

結果會溢出到 J1:K6,一共 5 筆資料加 1 列標題。分頁在不同工作表的話,把範圍換成 台北訂單!A1:B4 這種寫法就行。語法見 VSTACK、HSTACK、CHOOSEROWS、CHOOSECOLS;來源在別的檔案,就改用 IMPORTRANGE,見 IMPORTRANGE 跨試算表同步。

清理

把合併後的品項整欄去掉多餘空格。M1 寫:

Google 試算表公式
fx

整欄去除多餘空格

=ARRAYFORMULA(TRIM(J1:J6))

M2:M6 會是「蘋果紅茶」「青茶」「烏龍」「蘋果紅茶」「青茶」,青茶後面的空格不見了。TRIM 只清得掉半形空格,全形空格要另外處理,這部分見 文字清理函式。

補欄位

在 N2 查單價,O2 算小計:

Google 試算表公式
fx

用清理後的品項查單價

=ARRAYFORMULA(XLOOKUP(M2:M6, $G$2:$G$4, $H$2:$H$4))
Google 試算表公式
fx

杯數乘單價

=ARRAYFORMULA(K2:K6*N2:N6)

來看看結果:

品項杯數單價小計
蘋果紅茶745315
青茶1238456
烏龍342126
蘋果紅茶545225
青茶938342

XLOOKUP 的寫法見 XLOOKUP 入門。

檢查

我在 Q1 放一格最簡單的檢查,數有幾列沒有查到單價:

Google 試算表公式
fx

總列數減去查到單價的列數,0 代表全部查到

=ROWS(M2:M6)-COUNT(N2:N6)

結果是 0。COUNT 只數數字,查不到的 #N/A 不會被算進去,所以不是 0 就代表有幾列有問題。反過來,0 只代表單價都查到了,重複列、杯數是文字之類的問題它抓不到,還是要看過資料。

彙總

最後才算報表要的數字。青茶賣了多少:

Google 試算表公式
fx

青茶的小計加總

=SUMIF(M2:M6, "青茶", O2:O6)

結果是 798(456 加 342)。如果要的是整張分組報表,換成 QUERY 或 資料透視表。

為什麼清理要排在補欄位前面

假設反過來,先拿合併後的 J 欄去查單價:

Google 試算表公式
fx

沒有清理就直接查單價

=ARRAYFORMULA(XLOOKUP(J2:J6, $G$2:$G$4, $H$2:$H$4))

上排先補欄位:尾端有空格的青茶得到 #N/A;下排先用 TRIM 清理,再查到 38← 左右滑動看完整的圖,點圖可放大

圖:同一個「青茶」,沒清理就查單價得到 #N/A,清理後才查到 38。

結果是 45、#N/A、42、45、38。「青茶 」跟價目表的「青茶」少一格空白,對 XLOOKUP 來說就是不同的字。這時候檢查那一格會變成 1,我就知道要回頭看清理。

這就是流程裡那條回頭箭頭的意思。檢查這一步用來判斷「哪一步出問題」,所以我把它放在彙總前面,彙總的數字有錯時,先看檢查格。

資料每天都會進來的時候

上面用的是固定範圍,台北新增一筆就不會跟著進來。想讓新資料自動跟上,要把範圍改成 A2:B 這種開放式範圍,寫法見 ARRAYFORMULA 入門。

但開放式範圍用 VSTACK 疊起來,台北那一份的空白列會一起被帶進來,夾在兩間分店中間。我的做法是再用 FILTER 把整列空白的濾掉:

Google 試算表公式
fx

疊起來之後濾掉空白列

=FILTER(VSTACK(A2:B, D2:E), VSTACK(A2:A, D2:D)<>"")

以上面的資料來說,結果還是同樣 5 筆資料(這個寫法不含標題列)。FILTER 的條件怎麼寫,見 FILTER 入門。

哪一步遇到什麼,看哪一篇

遇到的狀況看哪一篇
來源在別的試算表檔案IMPORTRANGE 跨試算表同步
空格、大小寫、看不見的字元文字清理函式
電話、編號這類要用規則抽出來正規表示式抽取文字
髒資料太雜,公式寫不動讓 AI 幫你清理資料
想在輸入的時候就擋掉錯誤資料驗證完全指南
最後要排序、去重複SORT 與 UNIQUE

什麼時候不用走這麼多步

如果只是這個月要一次性的數字,資料也只有幾十列,直接複製貼上再手動改,比建六步公式快。我會花時間建這套流程的條件很單純:同樣的事會重複做,而且每次來源的長相差不多。

另外,每一步多一組公式欄,欄位會變多,檔案也會比較難讀。換來的是出錯時能一步一步往回查,我覺得值得,但資料量大到變慢的時候,要回頭看 試算表為什麼越來越慢 的排查順序。

下個月兩份新的訂單表來了,貼進原始資料,報表自己會更新,我只要看一眼檢查格是不是 0。我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
#資料整合#資料清理#處理流程#跨工作表
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

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

接下來可以

這篇在技能樹的 Lv.4「進階應用」,模組「進階資料處理」(第 1/1 篇)。讀完這篇,路線上的下一個模組是「用圖表說清楚你的數據」。

回到技能樹

相關文章

查看所有文章

留言討論

共 0 則留言

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

免費,隨時可取消。

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