跳到主要內容跳到頁尾

SORT 與 UNIQUE 實戰:從訂單流水帳做出會員清單與消費排行

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

拿一份手搖飲訂單流水帳,用 UNIQUE 整理不重複的會員,搭配 COUNTIF、SUMIF 做出次數表,再用 SORT 多欄排序與 SORTN 取前三名,最後整理資料每天新增時的寫法。

發布 更新

文章目錄

店裡每天會記下一筆一筆的訂單,累積了兩週,老闆問我:這段時間有幾位會員下過單?買最多的前三名是誰?

這份流水帳一個會員會出現好幾次,要先去重、再計算、最後排序。SORT 和 UNIQUE 的基本寫法在 SORT 與 UNIQUE 入門 講過了,這篇直接拿它們組出一張排行榜。

原始流水帳與想要的成品

訂單放在 A1:D16,共 15 筆,會員用編號表示:

日期會員品項杯數
2026/10/01M014蘋果紅茶12
2026/10/01M021烏龍奶茶37
2026/10/02M007蘋果綠茶8
2026/10/02M014青茶17
2026/10/03M033蘋果紅茶21
2026/10/04M021蘋果紅茶9
2026/10/05M007烏龍奶茶5
2026/10/06M014蘋果紅茶12
2026/10/07M045青茶29
2026/10/08M021青茶12
2026/10/09M033烏龍奶茶14
2026/10/09M052蘋果綠茶4
2026/10/10M014烏龍奶茶26
2026/10/10M045蘋果紅茶3
2026/10/11M045烏龍奶茶3

我想從這份資料生出四樣東西:不重複的會員名單、每個品項被點了幾次、會員的消費排行,還有排行的前三名。結果全部放在 F 欄以右的空白區域,原始資料不動,所以每一個公式都不會改到 A 到 D 欄。

先列出不重複的會員

手算的話,要從上往下看 B 欄,看到沒見過的編號就抄一次,15 筆還撐得住,每天多幾十筆就不想做了。

Google 試算表公式
fx

不重複的會員,編號由小到大

=SORT(UNIQUE(B2:B16), 1, TRUE)
  • UNIQUE(B2:B16):先把 B 欄去重。
  • 1:去重後只有一欄,所以依第 1 欄排序。
  • TRUE:遞增。

在 F2 輸入,F1 另外手打標題「會員」。來看看結果:

會員
M007
M014
M021
M033
M045
M052

一共 6 位,順序是編號由小到大。

品項被點了幾次

我想知道每個品項在流水帳出現幾次。UNIQUE 負責列出品項,COUNTIF 負責數次數,COUNTIF 的用法在 SUMIF 與 COUNTIF 入門 有講。

先拆成兩步看。F2 放 UNIQUE:

Google 試算表公式
fx

列出不重複的品項

=UNIQUE(C2:C16)

它會往下展開 4 格,F2:F5。G2 放 COUNTIF,條件一次給它整塊 F2:F5:

Google 試算表公式
fx

一次數出 F2:F5 每個品項的筆數

=ARRAYFORMULA(COUNTIF(C2:C16, F2:F5))

COUNTIF 的條件通常只吃一格,給它一整塊就得靠 ARRAYFORMULA 包起來,才會一格一格都算。來看看結果:

品項筆數
蘋果紅茶5
烏龍奶茶5
蘋果綠茶2
青茶3

5 + 5 + 2 + 3 = 15,和流水帳的筆數對得上。

不過 F2:F5 是我手動框的,品項多一種就要回來改。所以我會直接讓 UNIQUE 自己出現在 COUNTIF 裡面,再用大括號把兩欄併成一塊,交給 SORT:

Google 試算表公式
fx

品項與筆數併成兩欄,筆數多的在前,筆數相同則品項遞增

=SORT( {UNIQUE(C2:C16), ARRAYFORMULA(COUNTIF(C2:C16, UNIQUE(C2:C16)))}, 2, FALSE, 1, TRUE )
  • {A, B}:大括號裡用逗號把兩塊資料左右併起來,兩塊要一樣高,這邊都是 4 列。
  • 2, FALSE:第一優先,依第 2 欄,也就是筆數,由大到小。
  • 1, TRUE:第二優先,筆數一樣的話,依第 1 欄,也就是品項,遞增。

這條是 Google 試算表的寫法,貼進 Excel 365/2024 會出錯:Excel 的大括號陣列常數放不進範圍或函式結果,併欄要用 HSTACK,多欄排序要用 SORTBY,不是 SORT 後面一組一組往下接。

來看看結果,F1:G1 手打標題:

品項筆數
烏龍奶茶5
蘋果紅茶5
青茶3
蘋果綠茶2

烏龍奶茶和蘋果紅茶都是 5 筆,所以看第二組排序,品項照筆畫由少到多,「烏」比「蘋」少,烏龍奶茶排前面。

會員消費排行

接著做主菜。每位會員要三樣東西:會員編號、下了幾筆單、買了幾杯。筆數用 COUNTIF,杯數用 SUMIF,一樣各包一層 ARRAYFORMULA:

Google 試算表公式
fx

會員、訂單筆數、總杯數,依總杯數由大到小,杯數相同則筆數多的在前

=SORT( { UNIQUE(B2:B16), ARRAYFORMULA(COUNTIF(B2:B16, UNIQUE(B2:B16))), ARRAYFORMULA(SUMIF(B2:B16, UNIQUE(B2:B16), D2:D16)) }, 3, FALSE, 2, FALSE )
  • 大括號裡三塊資料併成三欄:會員、筆數、總杯數。
  • 3, FALSE:第一優先,依第 3 欄,總杯數,由大到小。
  • 2, FALSE:第二優先,總杯數一樣的話,筆數多的在前。

放在 F2,F1:H1 手打標題。來看看結果:

會員筆數總杯數
M014467
M021358
M045335
M033235
M007213
M05214

M045 和 M033 的總杯數都是 35,M045 下了 3 筆、M033 下了 2 筆,所以 M045 排在前面。第二組排序欄就是為了這種情況而寫的。總杯數加起來也對得上:67 + 58 + 35 + 35 + 13 + 4 = 212,和流水帳 15 筆杯數的加總一樣。

用 SORTN 只取前 3 名

老闆只想看前三名。SORTN 是排序之後只留前 n 列:

並列的時候要留幾列,有四種模式可以選,這篇先用預設的 0,就是剛好留 n 列,四種模式的差別在 進階陷阱 有整理。排序的參數跟 SORT 一樣,是成對往後接的。Excel 沒有 SORTN,365/2024 可以用 TAKE(SORT(…), 3) 取前 3 列(Excel 2021 沒有 TAKE)。

我直接引用上一步溢出的範圍 F2:H7,放在 J2:

Google 試算表公式
fx

取總杯數前三名,杯數相同則筆數多的在前

=SORTN(F2:H7, 3, 0, 3, FALSE, 2, FALSE)
  • F2:H7:上一步排好的會員排行,不含標題。
  • 3:只留 3 列。
  • 0:並列模式用預設。
  • 3, FALSE, 2, FALSE:和上一個公式一樣的兩層排序。

J1:L1 手打標題,來看看結果:

會員筆數總杯數
M014467
M021358
M045335

這邊 F2:H7 本身已經排好了,我還是把排序欄寫上去,這樣之後上一步的 SORT 換了寫法,這條的順序也不會跟著變。

只下過一次單的會員

UNIQUE 的第三個參數填 TRUE,只會留下只出現過一次的值。我想找「只下過一次單」的會員,通常是想給他們發一張回購券:

Google 試算表公式
fx

只出現過一次的會員

=UNIQUE(B2:B16, FALSE, TRUE)

來看看結果:

會員
M052

流水帳裡只有 M052 一筆,其他五位都下過兩筆以上。

資料每天新增怎麼辦

上面的範圍都停在第 16 列。明天在第 17 列往下貼新訂單,公式不會自動把第 17 列算進去,範圍要改,我是不想天天改。

可以把範圍寫成 B2:B、D2:D 這種整欄的寫法,不過整欄範圍會把下面的空白列也帶進去,所以要先用 FILTER 把空白濾掉。排行榜的公式就變成這樣,順便用 LET 先把去重後的會員存成 m,不必寫三次:

Google 試算表公式
fx

整欄範圍版的會員排行,新增的訂單會自動算進去

=LET( m, UNIQUE(FILTER(B2:B, B2:B<>"")), SORT( {m, ARRAYFORMULA(COUNTIF(B2:B, m)), ARRAYFORMULA(SUMIF(B2:B, m, D2:D))}, 3, FALSE, 2, FALSE ) )

資料還是這 15 筆的時候,結果和上一節的排行表一樣。之後新增訂單,只要接在流水帳的最下面往下貼,排行榜就會跟著更新。

要小心的是排行榜下面和右邊要留空,新會員一多,結果往下展開時如果碰到別的資料,會顯示 #REF!。還有一點,排行榜不能放在被公式引用的 B 欄或 D 欄裡,不然 Sheets 會提示「系統偵測到循環相依性」,結果同樣是 #REF!,把公式搬到資料旁邊其他欄(例如 F 欄以右)就好。

做法比較

這張排行榜也可以用樞紐分析表做,兩邊各有適合的地方:

  • 公式版:排序規則可以寫死兩層,取前三名也能直接接 SORTN,成品放在報表頁,每天自己更新。
  • 樞紐分析表:點幾下就做完,想換個維度看,例如改成按品項彙總,拖欄位就好,詳細可以看 樞紐分析表入門。

我個人是這樣分的:要給別人看的固定報表用公式,自己臨時想看一眼用樞紐分析表。

練習

1

每個品項的總杯數

用 A2:D16 的流水帳,列出每個品項的總杯數,依總杯數由大到小排序。要怎麼寫?

寫好之後可以自己對一下:四個品項的總杯數加起來,應該和流水帳的 212 杯一樣。

如果想先挑出某幾間門市或某段日期,再做排行,可以接著看 FILTER 實戰,把 FILTER 包在 UNIQUE 裡面就好。

我是喜特先生,Mr. Sheet,我們下個教學見!

分享:
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

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

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

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

免費,隨時可取消。

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