跳到主要內容跳到頁尾

SCAN 年度累計:跨年重新計算,不靠空白列分組

4 分鐘閱讀摘要與日期

先排序日期,再用 SCAN 按年份重設累計;處理同年空白列、跨年、零金額與退款,並加入年度目標達成率與零分母檢查。

發布 更新

文章目錄

每筆銷售金額都要加上同一年之前的金額,到了新年再從當年的第一筆開始。SCAN 會回傳每一步的累計值,很適合做年度進度表。

關鍵是以日期的年份決定是否重設。空白列只是版面留白,不能代表跨年;反過來說,資料沒有插入空白列,跨年仍然要重新計算。

先準備故意亂序的資料

在 A1:B7 輸入下表,A4:B4 整列留空。日期必須是試算表認得的真正日期,金額必須是數值;可用日期選擇器輸入,避免把日期當成文字。

列A:日期B:金額
1日期金額
22027/1/20
32026/12/3010
4
52027/1/15
62026/12/3120
72026/12/292.5

先保留 A8:B20 空白。這個案例同時有跨年、夾在兩個年度交界的空列、小數與零金額。

在 D1:G1 依序填「排序日期、排序金額、年度累計、達成率」,J1 填「年度目標」,J2 填數值 100。清空 D2:G20,供三組公式展開。

第一步:檢查成對資料,再按日期排序

在 D2 輸入:

Google 試算表公式
fx

空列略過,日期或金額缺一格就先停止

=IF( COUNTA(A2:B20)=0, "沒有資料", IF( OR( SUMPRODUCT(N((A2:A20="")<>(B2:B20="")))>0, COUNT(A2:A20)<>COUNTA(A2:A20), COUNT(B2:B20)<>COUNTA(B2:B20) ), "請檢查日期與金額", SORT(FILTER(A2:B20, A2:A20<>""), 1, TRUE) ) )

公式會擋下日期與金額沒有成對、日期為文字、金額為文字的情況。整份輸入空白顯示「沒有資料」。檢查的是數值型別;它無法判斷誤填的數字是不是你真正要的日期,因此仍要人工核對年份與日期顯示。

把 D2:D20 設為日期格式。D2:E6 應依序是:

排序日期排序金額
2026/12/292.5
2026/12/3010
2026/12/3120
2027/1/15
2027/1/20

原始空列已移除,但不會因此重設累計。若同一天有多筆資料,本例逐筆累計;需要固定同日的先後順序時,應再加交易時間或唯一序號排序。本篇資料每天只有一筆。

第二步:用 SCAN 比較前後年份

在 F2 輸入:

Google 試算表公式
fx

第一筆直接取金額,年份相同累加,年份改變重新開始

=IF( COUNT(D2:D20)=0, "", LET( d, FILTER(D2:D20, D2:D20<>""), v, FILTER(E2:E20, D2:D20<>""), SCAN( 0, SEQUENCE(ROWS(d)), LAMBDA(acc, i, IF( i=1, INDEX(v, i), IF( YEAR(INDEX(d, i))=YEAR(INDEX(d, i-1)), acc+INDEX(v, i), INDEX(v, i) ) ) ) ) ) )

SCAN 這次掃描的是列序號,而不是直接掃金額。如此一來,i 可以同時取得這一列的日期與金額,再比較前一列的年份。acc 保存上一步的累計結果。第一筆沒有前一筆可比,直接從它的金額開始。

F2:F6 會是 2.5、12.5、32.5、5、5。2027 年第一筆回到 5,第二筆金額為 0,所以維持 5。若金額是退款負值,會從當年度累計扣除,不會因負值而重設。

Google 官方說明,SCAN 的 LAMBDA 接受兩個名稱參數,每一步需回傳單一值;本例每次回傳的就是該列累計金額。SCAN 官方說明

第三步:加入年度目標達成率

在 G2 輸入,再把 G2:G20 設成百分比:

Google 試算表公式
fx

本例每年共用同一個正數年度目標

=IF( OR(NOT(ISNUMBER($J$2)), $J$2<=0), "請填正數目標", IF( COUNT(F2:F20)=0, "", ARRAYFORMULA(IF(F2:F20="", "", F2:F20/$J$2)) ) )

J2 是每年的共同目標 100,所以五筆達成率依序是 2.5%、12.5%、32.5%、5%、5%。達成率會跟著年度累計重設;不是把所有年份一起除以目標,也不是讓每筆金額各自除完就結束。

目標填 0、負數或文字時,顯示「請填正數目標」。試完請把 J2 改回 100。若每年的目標不同,需要另建年度目標對照表,本篇這個共同目標公式就不適用。

練習與使用限制

  1. 把 B3 從 10 改成 -2,確認 2026 年的累計變成 2.5、0.5、20.5;2027 年仍是 5、5。完成後還原為 10。
  2. 清空 A3、保留 B3,應顯示「請檢查日期與金額」;還原日期 2026/12/30。
  3. 把 J2 改成 0,確認得到提示而不是除以零錯誤,再還原為 100。

輸入範圍只到第 20 列;增加資料時,要同步擴充原始範圍、排序結果及後續累計參照。此處使用西曆年度,不適用從七月開始的會計年度。範例也沒有自動排除重複訂單,重複輸入會重複累加。

若出現 #REF!,先清空結果範圍並取消合併儲存格。不要把手動備註插進 D2:G20;備註應放在原始資料表,並以穩定的交易識別碼對應。

本文改寫自方格子的 SCAN 教學,將「空白列分段」改成依真正年份分組。若還不熟悉累加器,可先看 LAMBDA 實戰;想將達成率畫成小圖,再看 SPARKLINE 迷你圖表。

分享:
#SCAN#年度累計#達成率
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

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

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

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

免費,隨時可取消。

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