【问题标题】:Start the Week Number from the first sunday of every fiscal year in Excel在 Excel 中从每个会计年度的第一个星期日开始周数
【发布时间】:2016-11-24 13:44:36
【问题描述】:

我正在尝试查找从 2 月的第一个星期日开始的财政年度的周数。我已经达到了可以得到从每年第一天开始的周数的地步(在我的情况下是 2 月)。

无法从第一个星期日开始。以下是我想出的。

=IF(AND(MONTH($E2)=2,DAY($E2)=1),1,ROUNDUP(($E2-DATE(YEAR($E2)-IF(MONTH($E2)<2,1,0),2,0)+WEEKDAY(DATE(YEAR($E2)-IF(MONTH($E2)<2,1,0),2,0)))/7,0))

我还希望它在今年最后一周的星期六结束。 例如:在 2016 年 2 月,周数应该从 2016 年 2 月 7 日开始,到 2017 年 2 月 4 日结束。

【问题讨论】:

  • 这似乎与SQL无关。
  • 单元格 E2 中存储了什么?

标签: excel datetime excel-formula vba


【解决方案1】:

使用此公式查找给定日期的周数:

=IF(A1>=IF(WEEKDAY(DATE(YEAR(A1),2,1),1)=1,DATE(YEAR(A1),2,1),DATE(YEAR(A1),2,7-WEEKDAY(DATE(YEAR(A1),2,1),1)+2)),ROUNDUP((A1-IF(WEEKDAY(DATE(YEAR(A1),2,1),1)=1,DATE(YEAR(A1),2,1),DATE(YEAR(A1),2,7-WEEKDAY(DATE(YEAR(A1),2,1),1)+2))+1)/7,0),ROUNDUP((A1-IF(WEEKDAY(DATE(YEAR(A1),2,1),1)=1,DATE(YEAR(A1)-1,2,1),DATE(YEAR(A1)-1,2,7-WEEKDAY(DATE(YEAR(A1)-1,2,1),1)+2))+1)/7,0))

我希望你想要这个。

更新

如果您想要财政季度的周数,请使用:

=ROUNDUP(MOD(=IF(A1>=IF(WEEKDAY(DATE(YEAR(A1),2,1),1)=1,DATE(YEAR(A1),2,1),DATE(YEAR(A1),2,7-WEEKDAY(DATE(YEAR(A1),2,1),1)+2)),ROUNDUP((A1-IF(WEEKDAY(DATE(YEAR(A1),2,1),1)=1,DATE(YEAR(A1),2,1),DATE(YEAR(A1),2,7-WEEKDAY(DATE(YEAR(A1),2,1),1)+2))+1)/7,0),ROUNDUP((A1-IF(WEEKDAY(DATE(YEAR(A1),2,1),1)=1,DATE(YEAR(A1)-1,2,1),DATE(YEAR(A1)-1,2,7-WEEKDAY(DATE(YEAR(A1)-1,2,1),1)+2))+1)/7,0)),13.01),0)

【讨论】:

  • 2 月的第一周显示为 0,此后周数逐渐增加。
  • 完美!奇迹般有效!现在我的另一个任务是我需要找到一周的季度。概念是一样的,财政年度从2月开始。如果不是太多请看一下:)
  • 周数应该在每个季度的第一个星期日重新开始,就我而言,这是 2 月的第一个财政季度..
【解决方案2】:

我只是把它放在一起(毫无疑问,有一种更优雅的方法可以做到这一点)。您可以通过将其放入 VBA 编辑器中的 Module 来使用它,然后在工作表上使用函数 =AltWeekNumber(E2)

Function AltWeekNumber(endDate As Range) As Date
    Dim startDate As Date
    startDate = FirstFebruarySunday(year(endDate.Value))
    If startDate > endDate Then
        startDate = FirstFebruarySunday(year(endDate.Value) - 1)
    End If
    AltWeekNumber = DateDiff("w", startDate, endDate.Value, vbSunday)
End Function

Private Function FirstFebruarySunday(year As Integer) As Date
    For i = 1 To 7
        If Weekday(DateSerial(year, 2, i)) = 1 Then
            FirstFebruarySunday = DateSerial(year, 2, i)
            Exit Function
        End If
    Next i
End Function

【讨论】:

  • 一个月的第一个星期日不能晚于第 7 号,因此您可以将FirstFebruarySunday 简化为DateSerial(year, 2, 8 - Weekday(DateSerial(year, 2, 7)))
猜你喜欢
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
相关资源
最近更新 更多