跳到主要內容跳到頁尾

FILTER 實戰:做一張選門市就換內容的訂單報表

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

用下拉選單選門市、輸入開始日與最低杯數,一條 FILTER 搭配 SORT 做出會自己更新的訂單報表,並整理多條件裡 AND 的逗號與 *、OR 的 + 怎麼混用,以及資料每天新增時的寫法。

發布 更新

文章目錄

每週要給店長看訂單,他每次都問同一句:「可以只看中和店嗎?只看 10 月 5 號以後、至少 15 杯的?」我之前的做法是每問一次就改一次篩選器,今天來把它做成一張報表:店長自己選門市、填日期、填杯數,下面的訂單就自己換。

FILTER 的基本寫法在 FILTER 入門 講過了,這篇直接把它接上下拉選單和 SORT。

原始資料與成品長相

訂單放在 A1:D13,共 12 筆:

日期品項門市杯數
2026/10/01蘋果紅茶信義12
2026/10/01烏龍奶茶板橋37
2026/10/02蘋果綠茶信義8
2026/10/03蘋果紅茶板橋21
2026/10/04烏龍奶茶信義5
2026/10/05青茶板橋29
2026/10/06蘋果綠茶中和9
2026/10/07蘋果紅茶中和33
2026/10/08青茶信義17
2026/10/09烏龍奶茶板橋14
2026/10/10蘋果紅茶信義26
2026/10/10青茶中和11

右邊我排成這樣:F1:G3 是三個控制格,F5:I5 放標題(日期、品項、門市、杯數),F6 開始放公式。下面先填成後面第一個範例要用的值:

FG
1門市板橋(下拉選單選的)
2開始日2026/10/01
3最低杯數15

控制格改了,F6 以下的訂單就跟著換。

下拉選單的選項跟著資料長

門市選項如果手打「信義、板橋、中和」,哪天開了新店就得回來改。先用這 12 筆固定範例建立選單。我在 L2 用 UNIQUE 列出門市,再多放一個「全部」:

Google 試算表公式
fx

門市選單來源,最上面加一個全部

={"全部"; UNIQUE(C2:C13)}

分號是把兩塊資料上下疊起來。結果從 L2 往下是:全部、信義、板橋、中和,順序是門市第一次在資料裡出現的順序。

接著選 G1,點「資料」>「資料驗證」,新增規則,條件選下拉式選單(來自範圍),範圍填 L2:L10,我多框幾格留給新門市。相依式下拉和更多設定,在 資料驗證 那篇有講,這邊就不重複。

一條 FILTER 吃三個條件

G1 選「板橋」,G2 填 2026/10/01,G3 填 15。我想要的是:門市符合、日期在開始日之後、杯數達標,三件事同時成立。

Google 試算表公式
fx

門市、開始日、最低杯數三個條件

=FILTER(A2:D13, (G1="全部")+(C2:C13=G1), A2:A13>=G2, D2:D13>=G3)
  • (G1="全部")+(C2:C13=G1):第一個條件。G1 選「全部」時,前半是 TRUE,每一列都過關;選了某間門市,前半是 FALSE,就看後半那間門市對不對。
  • A2:A13>=G2:第二個條件,日期不早於開始日。
  • D2:D13>=G3:第三個條件,杯數不低於最低值。

G2、G3 留空的話,空白當 0 比,所有列都過關,所以「空白就是不限制」,這是我刻意留的。

來看看結果,板橋、10/01 起、至少 15 杯,是原始資料裡的第 2、4、6 筆:

日期品項門市杯數
2026/10/01烏龍奶茶板橋37
2026/10/03蘋果紅茶板橋21
2026/10/05青茶板橋29

14 杯那筆(10/09)差一杯沒過門檻。

排序放在外面

FILTER 不會排序,順序永遠跟原始資料一樣。店長想先看杯數多的,就把它包進 SORT。依照 SORT 的語法,排序欄是篩出來那塊的第幾欄,這邊杯數是第 4 欄,FALSE 代表降序,後面再成對加一組「同杯數時日期由早到晚」:

Google 試算表公式
fx

篩完以杯數由大到小排序,同杯數日期早的在前

=SORT( FILTER(A2:D13, (G1="全部")+(C2:C13=G1), A2:A13>=G2, D2:D13>=G3), 4, FALSE, 1, TRUE )

來看看結果:

日期品項門市杯數
2026/10/01烏龍奶茶板橋37
2026/10/05青茶板橋29
2026/10/03蘋果紅茶板橋21

把 G1 改成「全部」、G2 改成 2026/10/05、G3 改成 10,不用動公式,結果變成 6 筆:

日期品項門市杯數
2026/10/07蘋果紅茶中和33
2026/10/05青茶板橋29
2026/10/10蘋果紅茶信義26
2026/10/08青茶信義17
2026/10/09烏龍奶茶板橋14
2026/10/10青茶中和11

SORT 在外、FILTER 在裡面,是先篩再排,要排的列比較少。反過來寫也算得出同樣的結果,我習慣先篩。排序的更多寫法在 SORT 與 UNIQUE。

多條件裡的逗號、* 和 +

上面三個條件之間用逗號,都要成立,也就是 AND。在 Google 試算表的 FILTER 裡,逗號和 * 效果一樣,* 是把兩個條件乘起來,兩邊都是 1 才會是 1:

和 篩出來的一樣。逗號這個寫法只有 Sheets 能用:Excel 的 FILTER 沒有第二個條件參數,第三個位置是 if_empty,Excel 要用 * 表示且、+ 表示或,這兩個符號在 Sheets 和 Excel 都通用。既然一樣,什麼時候要用 *?當 AND 和 OR 要混在同一個條件裡的時候。

我想看「信義的蘋果紅茶,或是不管哪間店,杯數 30 以上」。AND 用 *,OR 用 +:

Google 試算表公式
fx

信義的蘋果紅茶,或杯數至少 30

=FILTER(A2:D13, (C2:C13="信義")*(B2:B13="蘋果紅茶") + (D2:D13>=30))

算術規則一樣,先乘後加,所以前兩個比較先乘成一組,再加上杯數那一組,只要總和不是 0 就留下。來看看結果,信義的蘋果紅茶有 12 杯和 26 杯兩筆,杯數 30 以上有 37 和 33 兩筆:

日期品項門市杯數
2026/10/01蘋果紅茶信義12
2026/10/01烏龍奶茶板橋37
2026/10/07蘋果紅茶中和33
2026/10/10蘋果紅茶信義26

我習慣每個比較式都自己加括號,不靠運算順序,過兩個月回來看也看得懂。

沒有符合的時候

G1 選「中和」、G3 填 40,沒有任何一筆過關,FILTER 會是 #N/A(Excel 在這種情況回 #CALC!)。報表給店長看的話,用 IFNA 包最外層:

Google 試算表公式
fx

整張報表的完整公式,沒資料時顯示文字

=IFNA( SORT( FILTER(A2:D13, (G1="全部")+(C2:C13=G1), A2:A13>=G2, D2:D13>=G3), 4, FALSE, 1, TRUE ), "沒有符合的訂單" )

F6 就會顯示「沒有符合的訂單」。這邊要小心,IFNA 也會把你寫錯造成的 #N/A 蓋掉,細節放在 FILTER 進階陷阱。

另一個副作用是日期。沒包 IFNA 的 SORT(FILTER(...)) 會自動沿用日期格式,外面包了 IFNA 之後就不會,F 欄的日期會變成 46302 這種五位數的序列值(46302 就是 2026/10/07)。選取 F6 往下的儲存格,用「格式」>「數值」>「日期」設一次就好。

資料每天新增

範圍寫到 13 列,明天多一筆就漏了,前面的選單來源 UNIQUE(C2:C13) 也一樣。那條選單公式與報表公式都要一起延伸;只把下拉選單的輸出範圍框大,並不會擴大 UNIQUE 的輸入。我會把範圍改成開放到底的 A2:D,再多加一個條件擋掉空白列:

Google 試算表公式
fx

資料往下新增也不用改公式

=IFNA( SORT( FILTER(A2:D, A2:A<>"", (G1="全部")+(C2:C=G1), A2:A>=G2, D2:D>=G3), 4, FALSE, 1, TRUE ), "沒有符合的訂單" )

A2:A<>"" 不能省。G1 選「全部」時,空白列的門市雖然不等於 G1,但前半的 (G1="全部") 是 TRUE,整列會過關,結果下面就會混進一堆空白列。條件範圍一律寫到底、長度一致,才不會踩到大小不符的問題。

為什麼不用篩選器或 QUERY

篩選器要人手動點,每次換條件都要重點一遍。QUERY 也做得到這件事,字串組起來比較長,我個人門市和日期這種單純條件,用 FILTER 比較順手,要分組加總才換 QUERY,見 QUERY 基礎。

練習

1

兩間門市、杯數少的訂單

用 A2:D13 的訂單,篩出門市是「板橋」或「中和」,而且杯數小於 20 的整列訂單,順序維持原始資料。要怎麼寫?

換你自己的訂單試試看,先把控制格做出來,再慢慢往上加條件,一次加一個,壞了才知道是哪一個。

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

分享:
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

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

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

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

免費,隨時可取消。

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