每週要給店長看訂單,他每次都問同一句:「可以只看中和店嗎?只看 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 開始放公式。下面先填成後面第一個範例要用的值:
| F | G | |
|---|---|---|
| 1 | 門市 | 板橋(下拉選單選的) |
| 2 | 開始日 | 2026/10/01 |
| 3 | 最低杯數 | 15 |
控制格改了,F6 以下的訂單就跟著換。
下拉選單的選項跟著資料長
門市選項如果手打「信義、板橋、中和」,哪天開了新店就得回來改。先用這 12 筆固定範例建立選單。我在 L2 用 UNIQUE 列出門市,再多放一個「全部」:
門市選單來源,最上面加一個全部
={"全部"; UNIQUE(C2:C13)}分號是把兩塊資料上下疊起來。結果從 L2 往下是:全部、信義、板橋、中和,順序是門市第一次在資料裡出現的順序。
接著選 G1,點「資料」>「資料驗證」,新增規則,條件選下拉式選單(來自範圍),範圍填 L2:L10,我多框幾格留給新門市。相依式下拉和更多設定,在 資料驗證 那篇有講,這邊就不重複。
一條 FILTER 吃三個條件
G1 選「板橋」,G2 填 2026/10/01,G3 填 15。我想要的是:門市符合、日期在開始日之後、杯數達標,三件事同時成立。
門市、開始日、最低杯數三個條件
=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 代表降序,後面再成對加一組「同杯數時日期由早到晚」:
篩完以杯數由大到小排序,同杯數日期早的在前
=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 用 +:
信義的蘋果紅茶,或杯數至少 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 包最外層:
整張報表的完整公式,沒資料時顯示文字
=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,再多加一個條件擋掉空白列:
資料往下新增也不用改公式
=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 基礎。
練習
兩間門市、杯數少的訂單
用 A2:D13 的訂單,篩出門市是「板橋」或「中和」,而且杯數小於 20 的整列訂單,順序維持原始資料。要怎麼寫?
換你自己的訂單試試看,先把控制格做出來,再慢慢往上加條件,一次加一個,壞了才知道是哪一個。
我是喜特先生,Mr. Sheet,我們下個教學見!
接下來可以
相關文章
查看所有文章FILTER 入門:用一個條件篩出你要的資料
FILTER 的語法、單一條件怎麼寫、兩個條件的 AND 與 OR,以及沒有符合資料時的 #N/A。原始資料不動,結果放在別處。
SORT 與 UNIQUE:自動排序、自動去除重複
用 SORT 依一欄或多欄排序,用 UNIQUE 去掉重複的列,再把兩個函式套在一起,做出一份會跟著原始資料自動更新的清單。
資料驗證實戰:把訂單登記表的輸入錯誤擋在門口
以手搖飲門市的訂單登記表為例,設定下拉選單(含來自範圍與晶片樣式)、數字與日期範圍,再用 COUNTIF 擋重複的訂單編號、REGEXMATCH 擋格式不對的手機號碼,並說明拒絕輸入與顯示警告該怎麼選。
留言討論
共 0 則留言
