跳到主要內容跳到頁尾

SORT 與 UNIQUE:自動排序、自動去除重複

8 分鐘閱讀Lv.2 中級摘要與日期

用 SORT 依一欄或多欄排序,用 UNIQUE 去掉重複的列,再把兩個函式套在一起,做出一份會跟著原始資料自動更新的清單。

發布 更新

文章目錄

今天要來聊聊 SORT 和 UNIQUE,一個負責排序,一個負責把重複的資料去掉。

這兩個函式有個共通的好處:它們都是在別的地方「生出」一份新的結果,原始資料完全不動。原始資料改了,結果也會跟著變。

手動整理有多麻煩

我手上有一張手搖飲的訂單紀錄,一共 10 筆,分成信義和板橋兩間門市:

ABC
1品項門市杯數
2蘋果紅茶信義12
3烏龍奶茶板橋37
4蘋果綠茶信義8
5蘋果紅茶板橋21
6烏龍奶茶信義5
7青茶板橋29
8蘋果綠茶板橋9
9蘋果紅茶信義12
10青茶信義17
11烏龍奶茶板橋37

我想做兩件事:把訂單按杯數由多到少排好,還有找出「到底賣過哪幾種飲料」。

排序可以用選單,去重可以手動刪,不過 10 筆還好,如果資料每天都會新增呢?每天重新排一次、重新刪一次,想到就有點累了吧!這時候就可以請 SORT 和 UNIQUE 出場。

SORT

SORT 會把一個範圍照你指定的欄位重新排列,排好的結果放在別處,原本的資料維持原樣。

語法

  • 範圍:要排序的資料。
  • 排序欄:要依哪一欄排序,填的是這一欄在「範圍」裡面的第幾欄,不是試算表的 A、B、C 欄。排序欄也可以是範圍外的另一個單欄範圍,但列數要和範圍一樣。
  • 遞增:TRUE 是由小到大,也就是遞增,FALSE 是由大到小,也就是遞減。
  • 排序欄2、遞增2:選填,可以一組一組往後加,越前面的優先。

這邊要記得,「遞增」只認 TRUE 和 FALSE。很多人,包括以前的我,會想說用 -1 表示降序,但這是 Excel 的寫法,在 Google 試算表裡 -1 會被當成 TRUE,結果還是升序,而且不會報錯,很容易沒發現。Excel 的 SORT 正好反過來,sort_order 用 1(遞增)和 -1(遞減),降序要寫 ,所以同一條公式在兩邊貼來貼去,這個參數一定要改。

單欄排序

我想把訂單按杯數由小到大排。範圍是 A2:C11,不含標題列,杯數是這個範圍的第 3 欄。

如果要用 SORT 寫,就是:

Google 試算表公式
fx

依杯數由小到大排序

=SORT(A2:C11, 3, TRUE)
  • A2:C11:要排序的資料,整張訂單。
  • 3:依第 3 欄,也就是杯數排序。
  • TRUE:遞增。

在 E2 輸入公式,按下 Enter,結果會從 E2 往下、往右展開成 10 列 3 欄。來看看結果:

品項門市杯數
烏龍奶茶信義5
蘋果綠茶信義8
蘋果綠茶板橋9
蘋果紅茶信義12
蘋果紅茶信義12
青茶信義17
蘋果紅茶板橋21
青茶板橋29
烏龍奶茶板橋37
烏龍奶茶板橋37

整列都跟著杯數一起移動,品項和門市不會跟杯數對不上。想要由多到少,把最後一個參數換成 FALSE 就好:

Google 試算表公式
fx

依杯數由大到小排序

=SORT(A2:C11, 3, FALSE)

結果會是 37、37、29、21、17、12、12、9、8、5,剛好倒過來。

範圍如果連標題列一起框進去,標題也會被當成資料排進去,所以我習慣範圍從第 2 列開始選。

多欄排序

如果兩筆的杯數一樣,或者我想「先按門市分,同一間門市再按杯數排」,就要多寫一組排序欄和遞增。

Google 試算表公式
fx

先依門市遞增,同門市內再依杯數遞減

=SORT(A2:C11, 2, TRUE, 3, FALSE)
  • 2, TRUE:第一優先,依第 2 欄,也就是門市,遞增。
  • 3, FALSE:第二優先,門市相同的話,依第 3 欄,也就是杯數,遞減。

Google 試算表是「成對」把排序欄和遞增一組一組往後接。Excel 的 SORT 一次只收一個排序欄,多欄排序要改用 SORTBY(也是一組一組成對寫)。來看看結果:

品項門市杯數
烏龍奶茶板橋37
烏龍奶茶板橋37
青茶板橋29
蘋果紅茶板橋21
蘋果綠茶板橋9
青茶信義17
蘋果紅茶信義12
蘋果紅茶信義12
蘋果綠茶信義8
烏龍奶茶信義5

咦,板橋怎麼排在信義前面?因為試算表的語言設定是台灣時,中文是照筆畫由少到多排的,「板」8 畫、「信」9 畫,所以板橋在前。不是照注音,也不是照拼音喔!

UNIQUE

UNIQUE 會把重複的列去掉,只留下不重複的部分,順序是它們在來源範圍中第一次出現的順序。

語法

  • 範圍:要找不重複值的資料。
  • 依欄比對:選填,預設是 FALSE,也就是一列一列比較。填 TRUE 的話,會改成一欄一欄比較。
  • 只留出現一次的:選填,預設是 FALSE。填 TRUE 的話,只會留下「完全沒有重複」的項目,只要有重複,連第一筆也不留。

範例

我想知道賣過哪幾種飲料,只看品項那一欄:

Google 試算表公式
fx

列出不重複的品項

=UNIQUE(A2:A11)

結果是蘋果紅茶、烏龍奶茶、蘋果綠茶、青茶,4 種。順序就是它們在 A 欄第一次出現的順序。

範圍也可以是多欄。這時候 UNIQUE 比對的是整列,三欄都一樣才算重複:

Google 試算表公式
fx

去掉完全相同的整列訂單

=UNIQUE(A2:C11)

原本 10 筆,「蘋果紅茶、信義、12」和「烏龍奶茶、板橋、37」各出現兩次,所以會剩下 8 列:

品項門市杯數
蘋果紅茶信義12
烏龍奶茶板橋37
蘋果綠茶信義8
蘋果紅茶板橋21
烏龍奶茶信義5
青茶板橋29
蘋果綠茶板橋9
青茶信義17

只留出現一次的整列

第三個參數填 TRUE,會把有重複的列整組拿掉,連第一筆都不留。第二個參數用不到,維持預設的 FALSE 就好:

Google 試算表公式
fx

只留下完全沒有重複的整列訂單

=UNIQUE(A2:C11, FALSE, TRUE)

剛剛重複的那兩筆訂單,兩份都消失了,剩下 6 列:

品項門市杯數
蘋果綠茶信義8
蘋果紅茶板橋21
烏龍奶茶信義5
青茶板橋29
蘋果綠茶板橋9
青茶信義17

和上一個對照一下,差別就在「重複的那一組要留一筆,還是全部不要」。

依欄比對

資料如果是橫著放的,就輪到第二個參數上場。假設 A1:F1 這一列放的是六筆訂單的門市:

ABCDEF
1信義板橋信義中和板橋信義
Google 試算表公式
fx

橫向資料依欄去除重複

=UNIQUE(A1:F1, TRUE)

結果會橫向展開,只剩下「信義」「板橋」「中和」三欄。要是這邊沒填 TRUE,UNIQUE 會把這一整列當成一列,只有一列當然就沒東西可以去重,原樣回傳。

SORT 搭配 UNIQUE

兩個函式可以套在一起:先用 UNIQUE 去重,再把結果交給 SORT 排序。

回到一開始的題目,我想要「不重複的訂單,杯數由多到少」:

Google 試算表公式
fx

先去除重複的訂單,再依杯數由大到小排序

=SORT(UNIQUE(A2:C11), 3, FALSE)

從最裡面的括號看起:UNIQUE(A2:C11) 先得到上面那 8 列,SORT 再把這 8 列按第 3 欄遞減排好。來看看結果:

品項門市杯數
烏龍奶茶板橋37
青茶板橋29
蘋果紅茶板橋21
青茶信義17
蘋果紅茶信義12
蘋果綠茶板橋9
蘋果綠茶信義8
烏龍奶茶信義5

只想要品項的清單的話,也是同樣的套法:

Google 試算表公式
fx

不重複的品項,依品項遞增排序

=SORT(UNIQUE(A2:A11), 1, TRUE)

單欄的資料,排序欄就是 1。結果依序是青茶、烏龍奶茶、蘋果紅茶、蘋果綠茶,一樣是照筆畫:「青」8 畫、「烏」10 畫、「蘋」20 畫,兩個「蘋果」開頭的再比下一個字,「紅」比「綠」少畫。

結果出現 #REF! 怎麼辦?

SORT 和 UNIQUE 的結果都會自己往下、往右展開,這叫溢出。如果展開的路上有別的資料擋住,整個公式就會出現 #REF!。

舉例來說,我在 E2 輸入 ,它需要 E2 到 E5 這 4 格。但如果 E4 已經有東西,比如我隨手打了一個「x」,E2 就會變成 #REF!。

滑鼠移到 E2 的錯誤提示上,會看到「系統未展開陣列結果,以免覆蓋 E4 中的資料。」。把 E4 的內容清掉,結果就會自己跑出來,不用重新輸入公式。

所以我習慣把這類公式放在一塊空的區域,或是獨立的工作表,下面和右邊都不放其他東西。

我自己怎麼選

我個人的習慣是這樣:

  • 一次性的整理,例如把這份訂單排好就交給同事,我會直接用選單的「資料」>「排序範圍」,比寫公式快。
  • 要給別人隨時開來看的報表頁,我會用 SORT,因為原始資料新增後,報表頁會自己更新排序。
  • 只是自己想暫時換個角度看資料,我會用「篩選器」,排完就可以還原,不會留下東西。

要注意,選單排序和篩選器是直接動到原本的資料或檢視,SORT 則完全不動來源。

練習

1

只留一次出現的訂單,再按杯數由大到小

用 A2:C11 的訂單,只留下沒有重複的整列訂單,有重複的兩筆都不要,再依杯數由大到小排序。要怎麼寫?

試著用用看吧!如果想先篩出一部分資料再排序,可以接著看 FILTER,跟 SORT 搭配起來很順手。

拿 SORT 和 UNIQUE 組出會員排行榜的寫法在 SORT 與 UNIQUE 實戰,結果看起來怪怪的時候,可以翻 SORT、UNIQUE、SORTN 進階陷阱。

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

分享:
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

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

接下來可以

這篇在技能樹的 Lv.2「進階分析」,模組「篩選與整理資料」(第 2/2 篇)。讀完這篇,路線上的下一個模組是「整理文字資料」。

回到技能樹

相關文章

查看所有文章

留言討論

共 0 則留言

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

免費,隨時可取消。

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