【问题标题】:calculate the month from the year and week number in excel根据excel中的年份和周数计算月份
【发布时间】:2012-06-06 12:59:26
【问题描述】:

在 Excel 2007 中,我有一个年份数和周数,我想计算出月份数。

问题是,在我的情况下,每周的开始是星期一,所以几年中有些星期会重叠。

例子:

Year: 2012
Week 1 started: Monday 2nd January
Sunday 1st January was in week 52 of 2011

所以给出以下内容:

Year: 2011
Week: 10

我如何计算出第 10 周从 3 月 7 日开始,因此第 10 周在第 3 个月。

感谢您对此的任何帮助。

【问题讨论】:

    标签: excel date week-number


    【解决方案1】:

    我建议以下方法

    • 确定 1 月 1 日的 (ISO) 周(参见 this page)[在单元格 C4 中]

      =INT((B4-DATE(YEAR(B4-WEEKDAY(B4-1)+4),1,3)+WEEKDAY(DATE(YEAR(B4-WEEKDAY(B4-1)+4),1,3))+5)/7)(假设 B4 =DATE([Year],1,1))

    • 计算第 1 周的开始日期 [在单元格 D4 中]

      =IF(C4=1,B4-WEEKDAY(B4,3),B4+7-WEEKDAY(B4,3))

    • 确定相关周的星期一和相应的月​​份

      =MONTH(D4+7*([Week]-1))

    【讨论】:

    • 很好的答案,谢谢,在计算月份时花了一点时间确定 D4 是一年中的第 1 周。对我有用吗,我确实注意到像 2012 年这样的闰年有问题,第 18 周从 4 月 30 日开始,但上述公式在应该是第 4 周时返回第 5 周。幸运的是,我不必太准确有了这个,再次感谢。
    • 有趣,它似乎对我有用。对于 2012 年,第 18 周 C4 评估为 52(1 月 1 日是 2011 年第 52 周)。 D4 是 2012 年 1 月 2 日星期一,(D4+7*(18-1)) 应该是 4 月 30 日。也许我犯了一个错误,因为必须翻译公式。如果你让我知道错误在哪里,我会更新帖子。
    • 啊,我知道我的问题是什么。在第 1 周有效的公式中有一个对单元格 B1 的引用。我对那个特定的单元格没有任何价值,我假设它是 B4,所以我对其进行了调整,现在它可以工作了。
    • 谢谢,已修复!原来公式中还有另一个错误(+WEEKDAY 而不是 -WEEKDAY)。
    【解决方案2】:

    您实际上可以更简单地执行此操作。如果年份在A2,例如2012 年,周数在 B2 中,您可以使用此公式获取该周的开始日期

    =DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7

    日期格式

    ......显然,您可以将其包装在 MONTH 函数中以获取月份,即

    =MONTH(DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7)

    将结果单元格格式化为通用格式

    说明

    上面求出上一年的最后一个星期一的日期,然后加上周数 * 7 得到相关周的开始日期。

    对于 ISO 周,一年中的第一天始终是 12 月 29 日至 1 月 4 日期间唯一的星期一,因此要找到该日期,我们可以找到 1 月 5 日之前的星期一。

    要查找任何日期之前的星期一,您可以使用这个通用公式

    =date-WEEKDAY(date-2)

    所以如果日期是 A2 中显示的年份的 1 月 5 日,则与

    =DATE(A2,1,5)-WEEKDAY(DATE(A2,1,3))

    .....但这给出了今年的第一个星期一,所以如果我想要上一年的最后一个星期一,我可以减去 7 - 一种方法是从 5 中减去 7 得到 -2因此:

    =DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))

    【讨论】:

    • 谢谢,这件事让我对实际发生的事情感到困惑,-2 从一年的第一个月减去那一年一月第三天的工作日数......然后添加周 * 一周中的天数。您的答案看起来不错,而且更干净+1。谢谢
    • 需要一些头脑来理解逻辑,但是一个干净简单的公式很好的答案
    【解决方案3】:

    ISO 周总是包含 1 月 4 日,所以让我们从星期一开始获取它的工作日(显然“年”是带有年份的单元格):

    WEEKDAY(DATE(year;1;4))
    

    这是我们需要从该日期返回以找到星期一(加一)的天数

    DATE(year;1;4)-WEEKDAY(DATE(year;1;4))+1
    

    所以现在我们只需要依靠......

    DATE(year;1;4)-WEEKDAY(DATE(year;1;4))+1+weeknumber*7
    

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 2016-06-25
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2020-07-02
      相关资源
      最近更新 更多