Excel VBA – 等同上年date

我有一个工作表公式计算正确的等效date在前一年。 例如,在工作报告中,我们不比较05/04/2016和05/04/2015,因为2015年的第五个是星期天,今年是星期二。 因此,我们将它与07/04/2015进行比较。

由于闰年,它也不总是提前2天(或者-2后,无论你想看什么方式)。

因此,我创build了这个工作表公式,计算上一周同一周的周开始date,并增加今年的平日。

=(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函数,以便我可以传递任何我喜欢的variables,并计算出去年的等效date。

然而,这些function中的一些似乎并没有在VBA中可用,我知道Weekday是,我需要将DATE换成DateSerial。 但是在VBA中似乎MAX并不是一个可用的函数? 我也不知道WEEKNUM?

如果有人可以帮助将这个公式转换成一个函数,我真的很感激,这是我迄今为止:

 Function calcMTDDayDate(MTDDate As Date) As Date End Function 

那么….至less我做了一个开始…

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

例如:

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