WEEKNUM(date) − WEEKNUM(first-of-month) + 1 會傳回 Excel 中某行事曆月份內的週次編號,其中 WEEKNUM 在第二個引數為 21 時遵循 ISO 8601 標準。WEEKNUM 是 Excel 內建函數,會根據您提供的 return_type 代碼,為每個日期指派一個年內週次編號。對於大多數採用週一為週首並遵循 ISO 8601 規則的商業報表來說,公式 =WEEKNUM(A1, 21) − WEEKNUM(DATE(YEAR(A1), MONTH(A1), 1), 21) + 1 會傳回 A1 所在月份的週次編號,其中結果 1 代表包含該月份第一天的該週。使用 return_type 1 的同一公式,則會依 Excel 預設的週日起算編號方式,傳回月份內的週次,當月份於週間開始時,其行為會有所不同。了解您正在使用哪一種 return_type,以及 Excel 如何定義第 1 週,可以避免在儀表板上產生錯誤標籤,並防止 1 月初與 12 月底時報表對齊錯誤,因為 ISO 第 1 週可能橫跨兩個日曆年。

Excel 中「週次編號」的真正含義
Excel 並沒有單一的內建「月份內週次」函數。WEEKNUM 函數傳回的是年內週次,而非月內週次。若要取得某月份內的週次編號,請將目標日期的年內週次,減去該月第一天的年內週次,然後再加 1。
WEEKNUM 有個必要的第二引數稱為 return_type,用以控制採用哪一種週次編號系統。代碼 1 到 17 以及 21 是官方支援的值;若您省略引數,類型 1 為預設。只有 return_type 21 遵循 ISO 8601,該國際標準將第 1 週定義為包含 1 月 4 日的該週(等同於包含該年第一個星期四的週)。其他每個代碼則採用不同的週首日與不同的第 1 週認定規則。
| return_type | 週首日 | 第 1 週的認定規則 |
|---|---|---|
| 1 (default) | Sunday | Week containing January 1 |
| 2 | Monday | Week containing January 1 |
| 11 | Monday | Week containing January 1 |
| 12 | Tuesday | Week containing January 1 |
| 13 | Wednesday | Week containing January 1 |
| 14 | Thursday | Week containing January 1 |
| 15 | Friday | Week containing January 1 |
| 16 | Saturday | Week containing January 1 |
| 17 | Sunday | Week containing January 1 |
| 21 | Monday | ISO 8601: week containing the year's first Thursday |
兩項實用重點:如果您的團隊、廠商或報表採用 ISO 8601,請務必傳入 21;若您省略第二個引數,則預設使用類型 1,亦即以星期日為週首,這可能會對任何非星期日開始的月份之第 1 週產生錯誤標示。
傳回月份內週次編號的兩個公式
ISO 8601 版本的公式是多數商業與工程團隊想要的版本。假設 A1 儲存格中有一個日期,公式如下:
=WEEKNUM(A1, 21) − WEEKNUM(DATE(YEAR(A1), MONTH(A1), 1), 21) + 1
這會強制兩次 WEEKNUM 呼叫皆使用 ISO 8601 系統,因此其差值即為該月第一天到目標日期之間的 ISO 週數,再加上 1。
演算範例:A1 包含 2024-10-15(星期二)。 WEEKNUM("2024-10-15", 21) 傳回 42,因為包含 2024 年 10 月 15 日的 ISO 週,其星期四為 2024 年 10 月 17 日,落在 2024 年的 ISO 第 42 週。 DATE(YEAR("2024-10-15"), MONTH("2024-10-15"), 1) 解析為 2024 年 10 月 1 日(星期二)。 WEEKNUM("2024-10-01", 21) 傳回 40,因為 2024 年 10 月 1 日落在 ISO 週星期一 9 月 30 日至星期日 10 月 6 日的區間內。 42 − 40 + 1 = 3,因此 2024 年 10 月 15 日在 ISO 8601 下屬於 10 月的第 3 週。
預設版本則省略第二個引數或使用 1:
=WEEKNUM(A1) − WEEKNUM(DATE(YEAR(A1), MONTH(A1), 1)) + 1
此公式將月份的第 1 週定義為包含該月第一個日曆日的該週,無論該日是星期幾。兩個公式的結果可能不一致。差異會出現在星期二到星期六開始的月份:與該月第一天屬於同一日曆週的日期,在類型 1 下可能傳回 1,但在類型 21 下則可能傳回較大的數字,這是因為 ISO 8601 將第 1 週錨定在包含第一個星期四的該週,而非包含第 1 天的該週。
Excel 的 WEEKNUM 在年份交界處失效之處
上述兩個公式皆會默默地繼承您所傳入之 return_type 的邊界行為。對於 return_type 1 以及代碼 2 到 17,第 1 週定義為包含 1 月 1 日的該週,因此 1 月 1 日永遠落在新年的第 1 週,而 12 月 31 日永遠落在同一年的最後一週。對於類型 21,ISO 8601 使用不同的錨點:第 1 週為包含該年第一個星期四的該週,且週年依星期四而非 1 月 1 日來決定。
此差異會產生一些日期,其所在的週年與日曆年所暗示的不同。以下幾個具名範例可清楚呈現此邊界情況:
- 2016-01-01(星期五)屬於 2015 年的 ISO 第 53 週,記為 2015-W53,因為該週的星期四是 2015 年 12 月 31 日。
- 2021-01-01(星期五)屬於 2020 年的 ISO 第 53 週,記為 2020-W53。
- 2021-01-04(星期一)屬於 2021 年的 ISO 第 1 週,記為 2021-W01。
- 2024-12-30(星期一)屬於 2025 年的 ISO 第 1 週,記為 2025-W01,因為該週的星期四是 2025 年 1 月 2 日。
如果您的試算表將 1 月 1 日一律視為新年的第 1 週,那麼在將日曆年與 ISO 週串接的任何資料流程中,這些日期都會被錯誤標示。部分 ISO 週年包含 53 週而非 52 週;部分 ISO 週年包含 53 週而非 52 週,例如 2015、2020 與 2026 年。
相同的邊界問題也以另一種方式影響 Excel:若某月的第一天落在前一個 ISO 年,則 WEEKNUM(date, 21) − WEEKNUM(first-of-month, 21) 的結果可能無法正確反映該日期在當月中的位置。假設您有一個 2025 年 1 月初的日期,被標示為「2025 年 1 月第 N 週」;若 2025 年 1 月 1 日本身落在 2025 年的 ISO 第 1 週,則公式仍可正常運作,但若您跨越年界比較而未將兩項對齊到同一個 ISO 年,則必須自行套用修正。
使用週次計算器取得 ISO 8601 週次標籤
當目標是取得單一且符合標準的週次標籤,而非在每一列都寫自訂公式時,週次計算器會為任何有效的西曆日期傳回精確的 ISO 8601 標籤。它使用 UTC 算術計算週年、兩位數的週次,以及以星期一為基準的星期幾,因此瀏覽器的時區與日光節約時間的切換都不會使所選日期產生位移。
如何取得 ISO 8601 標籤:
- 以 YYYY-MM-DD 格式選擇或輸入有效的西曆日期。
- 選擇「Calculate ISO week」(計算 ISO 週次)。
- 讀取以 YYYY-Www 格式傳回的標籤,其中 YYYY 為 ISO 週年,W 為固定字母,ww 為兩位數的週次編號;計算器也會回報以星期一為基準的星期幾編號,星期一為 1,星期日為 7。
- 僅在適用 ISO 8601 規則之處使用該標籤。對於週日起算的曆法、財政曆、零售 4-4-5 曆或特定地區的編號方式,ISO 標籤將不相符,結果必須以不同的方式解讀。
此計算器圍繞著八個跨年界案例所建構,涵蓋一般的第 1 週、新年附近的星期日、前一個 ISO 年的日期、下一個 ISO 年的日期,以及多個 53 週年。無效的日期(例如 2023-02-29)會明確顯示失敗,而不會自動進位到錯誤的值,因為解析器會在任何計算執行之前,先在 UTC 中來回處理 YYYY-MM-DD 字串。
對於像 2024-12-30 這樣的日期,週次計算器會傳回 2025-W01 以及星期一的星期幾編號。對於 2016-01-01,則會傳回 2015-W53 以及星期五的星期幾編號。這些正是符合 ISO 標準的儀表板、檔案命名慣例或稽核紀錄所需要的邊界答案。
混用週次系統時的常見陷阱
當 Excel 與 ISO 8601 相遇時,會反覆出現五種錯誤。
第一,省略 WEEKNUM 的第二個引數。Excel 的預設為 return_type 1,採用週日起算並使用日曆年,而非 ISO 8601。以 =WEEKNUM(A1) 建置儀表板的試算表,在面對週一起算的資料時,每個日期都會相對於 ISO 報表靜悄悄地偏移最多一週。
第二,期望 WEEKNUM 直接給出月內週次。它並不會。WEEKNUM 永遠是年內週次。任何「月內週次」的數字,都是您的公式透過兩個 WEEKNUM 結果相減所衍生出來的值。
第三,假定 1 月 1 日永遠開始第 1 週。在 ISO 8601 下並非如此。但在 Excel 預設的 return_type 1 下則永遠如此。這兩種系統可能對同一個日曆日期給出不同的結果。
第四,忽略 53 週年。ISO 8601 的週年可能是 52 或 53 週。若您的樞紐分析表或合併鍵假設剛好 52 週,則落在 W53 的日期將會被丟棄或被重新標示為下一年的第 1 週,使得依週加總的資料在無聲中遭到損壞。
第五,將 ISO 週次標籤用於非 ISO 的系統。週日起算的曆法、財政曆、零售 4-4-5 曆以及特定地區的編號方式,皆會對同一個日期給出不同的週次。週次計算器明確地是 ISO 8601 工具;對於薪資、稅務、法律期限、財務報表或任何廠商 API,您必須先確認該系統所要求的確切曆法慣例,再套用任何週次標籤。計算器的輸出僅在 ISO 8601 下才是正確的。
當所有相關方都同意採用 ISO 8601 時,最簡潔的工作流程是讓計算器產生標準的 YYYY-Www 標籤,然後依該標籤進行合併、篩選或重新命名檔案。這能消除公式維護、return_type 的選擇,以及因某個儲存格使用 21 而另一個使用預設值所產生的邊界漂移。
若您在權衡選項,年齡計算圖表:年、月、週、日對此有詳細說明。
若您在權衡選項,如何在 Excel 中求解指派問題對此有詳細說明。