每個月初,我都要把上個月的銷售明細整理成一張「門市 × 月份」的報表,順便對一下目標達成了沒。這篇就拿 SUMIFS 做這張矩陣,再搭配 COUNTIFS、AVERAGEIFS、MAXIFS 補上筆數、平均和單筆最高。
單一條件的寫法在 SUMIF 與 COUNTIF 入門,日期區間、文字日期、萬用字元這些會踩的坑在 SUMIFS 進階陷阱,這邊都不重講,直接做報表。
先看明細資料
三家門市,八月到十月的銷售明細,一共 16 筆,放在 A1:E17:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | 日期 | 門市 | 品項 | 杯數 | 金額 |
| 2 | 2026/08/04 | 信義 | 蘋果紅茶 | 34 | 1530 |
| 3 | 2026/08/12 | 板橋 | 青茶 | 21 | 840 |
| 4 | 2026/08/19 | 左營 | 蘋果綠茶 | 17 | 765 |
| 5 | 2026/08/27 | 信義 | 鮮奶茶 | 26 | 1170 |
| 6 | 2026/09/02 | 板橋 | 蘋果紅茶 | 43 | 1935 |
| 7 | 2026/09/09 | 左營 | 青茶 | 12 | 480 |
| 8 | 2026/09/15 | 信義 | 蘋果綠茶 | 38 | 1710 |
| 9 | 2026/09/23 | 板橋 | 鮮奶茶 | 29 | 1305 |
| 10 | 2026/09/30 | 左營 | 蘋果紅茶 | 22 | 990 |
| 11 | 2026/10/01 | 信義 | 青茶 | 31 | 1240 |
| 12 | 2026/10/03 | 板橋 | 蘋果綠茶 | 18 | 810 |
| 13 | 2026/10/06 | 左營 | 鮮奶茶 | 47 | 2115 |
| 14 | 2026/10/07 | 信義 | 蘋果紅茶 | 25 | 1125 |
| 15 | 2026/10/09 | 板橋 | 青茶 | 14 | 560 |
| 16 | 2026/10/10 | 左營 | 蘋果紅茶 | 36 | 1620 |
| 17 | 2026/10/10 | 信義 | 鮮奶茶 | 19 | 855 |
日期都是真正的日期,不是文字。我故意放了 9/30 和 10/01 這種剛好跨月的兩筆,等下看月份有沒有切對。
我想要的成品是這樣:左邊一欄是門市,上面一列是月份,交叉的格子就是那家店那個月的金額。手算信義十月的話,是 1240 + 1125 + 855 = 3220,等一下公式的結果要跟它一樣。
做出門市 × 月份矩陣
矩陣放在 G1:K5。G 欄放門市名稱,H1:J1 放三個月份的「月初日期」,也就是 2026/08/01、2026/09/01、2026/10/01。月份用真正的日期,不要打成文字的「8月」,這樣公式才能拿它來算區間。看起來想只顯示月份的話,把這三格的數字格式改成自訂的 M"月" 就可以了,儲存格裡面還是日期。
H2 這一格,我要的是「G2 那家店、H1 那個月」的金額:
信義在 2026/08 的金額
=SUMIFS(
$E$2:$E$17,
$B$2:$B$17, $G2,
$A$2:$A$17, ">="&H$1,
$A$2:$A$17, "<"&EDATE(H$1, 1)
)- 加總範圍:
$E$2:$E$17,金額欄。 - 第一組條件:
$B$2:$B$17等於$G2,門市要一樣。 - 第二組條件:日期大於或等於
H$1,也就是月初那一天。 - 第三組條件:日期小於
EDATE(H$1, 1),也就是下個月的月初。
EDATE 是把日期往後推幾個月,EDATE(2026/08/01, 1) 就是 2026/09/01,這樣不用自己判斷這個月有 28、30 還是 31 天。EDATE 的細節在 日期計算實戰。
美元符號的位置是這條公式的重點。$G2 鎖住欄、不鎖列,往右複製時門市永遠看 G 欄,往下複製才會換成下一家店。H$1 鎖住列、不鎖欄,往下複製時月份永遠看第 1 列,往右複製才會換成下一個月。加總範圍與三組條件範圍都整個鎖死,因為明細的位置不會跟著動。
在 H2 輸入公式,按下 Enter,再複製到 H2:J4 的九格。來看看結果:
| 門市 | 8月 | 9月 | 10月 | 合計 |
|---|---|---|---|---|
| 信義 | 2700 | 1710 | 3220 | 7630 |
| 板橋 | 840 | 3240 | 1370 | 5450 |
| 左營 | 765 | 1470 | 3735 | 5970 |
| 合計 | 4305 | 6420 | 8325 | 19050 |
信義 10 月是 3220,跟剛剛手算的一樣。左營的 9/30 那筆 990 算在九月,10/01 的信義青茶 1240 算在十月,跨月的兩筆都有切對。
合計欄和合計列用 SUM 就好,K2 是 ,H5 是 。K5 的 19050 剛好等於明細金額欄的總和,我習慣拿 對一下,兩個數字一樣才放心把報表交出去。
日期區間放在儲存格
月報有固定的月份,但老闆有時候會問「這個禮拜的板橋店賣多少」,區間不是整月。這種時候我會做一個小小的查詢區,把條件全部放進儲存格,之後只改儲存格就好。
在 G8:H10 放三個條件:
| G | H | |
|---|---|---|
| 8 | 開始日 | 2026/10/03 |
| 9 | 結束日 | 2026/10/09 |
| 10 | 門市 | 板橋 |
H11 算區間內的金額:
板橋在開始日到結束日之間的金額
=SUMIFS(
$E$2:$E$17,
$B$2:$B$17, $H$10,
$A$2:$A$17, ">="&$H$8,
$A$2:$A$17, "<"&($H$9+1)
)結束日包含當天,所以條件是「小於結束日加 1」,也就是隔天零點。板橋在 10/03 有 810、10/09 有 560,頭尾兩天都在區間裡,結果是 1370。
門市那一格如果填 *,因為 * 是萬用字元,會比對所有有文字的門市,等於全部門市。同樣的區間改成 *,會把 10/06 的左營 2115 和 10/07 的信義 1125 也算進來,結果是 4610。
筆數、平均、最高
金額之外,我通常還會看三個數字。條件都沿用查詢區那幾格,只有第一個範圍會換:
筆數用 COUNTIFS,它沒有加總範圍,直接放條件:
區間內板橋的訂單筆數
=COUNTIFS($B$2:$B$17, $H$10, $A$2:$A$17, ">="&$H$8, $A$2:$A$17, "<"&($H$9+1))結果是 2。
平均每筆金額用 AVERAGEIFS,第一個參數是要平均的範圍:
區間內板橋平均每筆金額
=AVERAGEIFS(
$E$2:$E$17,
$B$2:$B$17, $H$10,
$A$2:$A$17, ">="&$H$8,
$A$2:$A$17, "<"&($H$9+1)
)(810 + 560) / 2,結果是 685。
單筆最高杯數用 MAXIFS,一樣是要找最大值的範圍放第一個:
區間內板橋單筆最高杯數
=MAXIFS(
$D$2:$D$17,
$B$2:$B$17,
$H$10,
$A$2:$A$17,
">="&$H$8,
$A$2:$A$17,
"<"&($H$9+1)
)10/03 是 18 杯、10/09 是 14 杯,結果是 18。
區間裡沒有資料的時候
把開始日改成 2026/11/01、結束日改成 2026/11/30,十一月還沒有任何資料。這時候三個函式的反應不一樣:COUNTIFS 和 SUMIFS 得到 0,MAXIFS 也得到 0,只有 AVERAGEIFS 會是 #DIV/0!,因為沒有任何一筆可以拿來除。
MAXIFS 的 0 要小心,它看起來就像「最高是 0 杯」,其實是「沒有資料」。報表上我會把平均那格包起來,讓人一眼看出是沒資料:
沒有符合的資料時顯示尚無資料
=IFERROR(
AVERAGEIFS(
$E$2:$E$17,
$B$2:$B$17, $H$10,
$A$2:$A$17, ">="&$H$8,
$A$2:$A$17, "<"&($H$9+1)
),
"尚無資料"
)十一月的區間會顯示「尚無資料」,改回十月的區間就是 685。IFERROR 會把所有錯誤一併吃掉,包括公式寫錯造成的錯誤,所以我只包在最外層確定的地方,不會整張表都包。
加上目標與達成率
每家店十月都有業績目標,我在 L1 放標題「10 月目標」,L2:L4 依序是信義 3400、板橋 1500、左營 3700,L5 用 SUM 加總是 8600。M 欄算達成率:
十月實績除以十月目標,四捨五入到小數三位
=ROUND(J2/L2, 3)M2:M4 往下複製,M5 用 ,再把 M 欄的格式改成百分比(小數一位)。來看看結果:
| 門市 | 10 月實績 | 10 月目標 | 達成率 |
|---|---|---|---|
| 信義 | 3220 | 3400 | 94.7% |
| 板橋 | 1370 | 1500 | 91.3% |
| 左營 | 3735 | 3700 | 100.9% |
| 合計 | 8325 | 8600 | 96.8% |
左營已經超過目標。不過要注意,假設今天是 2026/10/11,十月才過了 11 天,明細只到 10/10,這些達成率是「目前的進度」。月底前還會繼續變動,所以我會把這一欄的標題寫成「截至今天」,免得有人拿去當結案數字。
達成率想用顏色標出落後的店,可以接著看 條件式格式。
新增資料的時候
明細每天都會新增一列,可是上面公式的範圍是寫死的 $E$2:$E$17,第 18 列的資料不會被算進去。我的做法是把範圍都改成整欄,$E:$E、$B:$B、$A:$A、$D:$D:
整欄範圍的版本,新增明細不用改公式
=SUMIFS($E:$E, $B:$B, $G2, $A:$A, ">="&H$1, $A:$A, "<"&EDATE(H$1, 1))結果和上面一模一樣,信義 8 月還是 2700。標題列那格是文字,不會符合日期條件,所以不受影響。代價是明細所在的 A 到 E 欄,下面不能再放別的東西,合計或備註要放到別欄,我才把報表放在 G 欄之後。
下個月要多一欄的話,不要直接在 K 欄輸入,因為 K 欄現在是合計,右邊還有 L 欄的目標和 M 欄的達成率。選取 K 欄,按右鍵選「在左側插入 1 欄」,原本的合計、目標、達成率會各往右移一欄,公式也會自動跟著調整(達成率仍然是用 J 欄的十月實績除以十月目標)。接著在新的 K1 輸入 2026/11/01,把 J2:J4 的公式複製到 K2:K4。最後把合計的 SUM 範圍補上新的一欄,例如信義的合計改成 ,合計列 K5 用 ,因為插在範圍最右側的欄不會被自動納入原本的 SUM。
為什麼不用樞紐分析表
兩種做法我都用,取捨是這樣:
- 樞紐分析表:拖拉幾下就有,資料新增時會自動更新,臨時看一種切法很快,做法在 樞紐分析表。
SUMIFS矩陣:每一格都是自己寫的公式,目標、達成率這種要跟別張表對照的欄位,可以直接放在旁邊一起算,缺點是範圍和月份標題要自己維護。
月報的版面每個月都一樣,又要放目標欄,我個人會選 SUMIFS。臨時想換個角度看資料,就拉一張樞紐分析表。
動手練習
信義十月的平均杯數
信義十月的訂單平均每筆賣幾杯?月份用 J1(2026/10/01)當條件,不要把日期寫死在公式裡。
把自己店裡的明細貼進來,換掉門市名稱和月份試試看吧!我是喜特先生,Mr. Sheet,我們下個教學見!
接下來可以
相關文章
查看所有文章SUMIF 與 COUNTIF 入門:用一個條件加總和計數
SUMIF、COUNTIF 的語法、條件怎麼寫(文字、比較符號、萬用字元與波浪號),把條件放在儲存格裡的 & 寫法,以及簡單提到的 AVERAGEIF。只談單一條件。
SUMIFS 進階陷阱:多條件、日期區間、萬用字元與 MAXIFS
整理 SUMIFS、COUNTIFS 多條件加總常踩的坑:參數順序和 SUMIF 相反、範圍大小不一致、日期區間與文字日期、OR 條件重複計算、萬用字元與 ~ 跳脫、空白條件,以及 MAXIFS、MINIFS、AVERAGEIFS 與 COUNTUNIQUEIFS。
年資、工作日、到期日:日期計算實戰
用 DATEDIF 算員工年資,用 NETWORKDAYS 和 WORKDAY 搭配假日清單算工作日,再用 EDATE 和 EOMONTH 算合約到期日與月底結帳日。
留言討論
共 0 則留言
