在 Excel 中根据多个条件将周数分配给日期

问题描述 投票:0回答:1

我正在尝试将周数分配给 2022 年至 2024 年之间的日期,以满足以下要求:

  1. 第一周从一年中的第一个星期日开始。
  2. 第一个星期日之前的日期应分配到上一年的最后一周。
  3. 确保每年只有 52 周

例如,2022 年 1 月 1 日是星期六,因此应指定为 52(2021 年第 52 周)。 2022 年 1 月 2 日是星期日,因此应指定为 1(2022 年的第 1 周)。同样,2022 年 12 月 31 日是星期六,所以应该是 52,2023 年 1 月 1 日是星期日,所以应该是 1。

我尝试了下面的代码,它指定 2022 年 1 月 1 日为第 52 周,2022 年 1 月 2 日为第 1 周,但 2023 年 1 月 1 日为第 53 周,尽管它应该是第 1 周(假设日期列位于单元格 A 中。我的日期的格式是 yyyy-mm-dd)。

if(a1<date(year(a1),1,1)+(8-weekday(date(year(a1),1,1),1)), weeknum(date(year(a1),1,1)-weekday(date(year(a1),1,1),1)+1,1),weeknum(a1-weekday(a1,1),1))

excel-formula week-number weekday
1个回答
0
投票

避免递归,这是(也许是粗略的)方法:

动态公式,Excel 2021 及更高版本

=LET(
    start_date, "2022-1-1",
    end_date, "2025-1-1",
    num_days, DAYS(end_date, start_date),
    dates, SEQUENCE(num_days, , start_date),
    years_starting_on_sunday, {1978, 1989, 1995, 2006, 2017, 2023, 2034},
    sunny_weeknum, IFS(
        ISNUMBER(XMATCH(YEAR(dates), years_starting_on_sunday)),
        WEEKNUM(dates),
        WEEKNUM(dates) = 1,
        IF(
            ISNUMBER(XMATCH(YEAR(dates) - 1, years_starting_on_sunday)),
            53,
            52
        ),
        TRUE,
        WEEKNUM(dates) - 1
    ),
    HSTACK(dates, sunny_weeknum)
)

Result

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.