Excel VBA - 等效上年日期

时间:2016-04-06 14:34:14

标签: excel vba excel-vba date

我有一个工作表公式,用于计算上一年度的正确等效日期。例如,当我们在工作时报告数据时,我们不会将05/04/2016与2015年4月5日进行比较,因为2015年的第5天是星期日,而今年是星期二。因此,我们将其与07/04/2015进行比较。

由于闰年,它并不总是提前+2天(或-2落后,无论你想看哪一种方式)。

因此,我创建了此工作表公式,该公式计算上一年同一周的周开始日期,并在今年的工作日添加-1。

=(MAX(DATE(B2,1,1),DATE(B2,1,1)-WEEKDAY(DATE(B2,1,1),2)+(WEEKNUM(E3,2)-1)*7+1))+(WEEKDAY(E3,2)-1)

B2 = 2015

E3 = 05/04/2016

我想将此工作表公式转换为VBA函数,以便我可以将任何变量传递给我喜欢的并计算出上一年的等效日期吗?

然而,其中一些功能似乎在VBA中不可用,我知道工作日是,我需要将DATE替换为DateSerial。然而,似乎MAX在VBA中是一个可用的功能吗?我也不了解WEEKNUM?

如果有人能帮助将此公式转换为函数我真的很感激,这就是我到目前为止所做的:

Function calcMTDDayDate(MTDDate As Date) As Date

End Function

嗯......我至少开始......

1 个答案:

答案 0 :(得分:2)

如果您将年份定义为52周,而不是按天或月,那么这会使计算更加简单,您可以使用DateAdd函数。

例如:

Function calcMTDDayDate(MTDDate As Date) As Date
    calcMTDDayDate = DateAdd("ww", -52, MTDDate)
End Function