Excel VBA中的日期计数功能

Excel VBA中的日期计数功能,excel,vba,Excel,Vba,我有期限、创建日期、天数值可用。 术语可以等于“下个月初”、“月底”、“现在”。 我正在尝试创建一个函数,它接受“Term”,如果其中的值是“下个月初”,它接受创建日期,到达该月底,然后添加“days”。 例如,如果创建日期为2017年1月1日,“期限”为“下个月初”,天数为5天。到2017年1月31日+5,所以答案是2017年2月5日。 我想出了一个excel公式 IF(P3046="Beginning of next month",EOMONTH(DATE(YEAR(Creation dat

我有期限、创建日期、天数值可用。 术语可以等于“下个月初”、“月底”、“现在”。 我正在尝试创建一个函数,它接受“Term”,如果其中的值是“下个月初”,它接受创建日期,到达该月底,然后添加“days”。 例如,如果创建日期为2017年1月1日,“期限”为“下个月初”,天数为5天。到2017年1月31日+5,所以答案是2017年2月5日。 我想出了一个excel公式

IF(P3046="Beginning of next month",EOMONTH(DATE(YEAR(Creation date+days),MONTH(Creation date+days),15),0)+1,0)
但我无法找出一个与VBA等效的方法。这就是我所尝试的:

IIF(Term = "Beginning of next month",DateSerial(year(Creation date+days),month(Creation date+days)+1,0)
但它并没有真正起作用。它给出了答案,但不是正确的答案。 有人看到我没有看到的错误吗。我已经开始做了一段时间了,所以我可能错过了一些东西


非常感谢你

您可以使用几个嵌套的
DateAdd
语句定义函数:

Public Function EOMONTH(ByVal d As Date, ByVal days As Integer) As Date
    EOMONTH = DateAdd("y", days, DateAdd("y", -1, DateAdd("m", 1, DateSerial(Year(d), Month(d), 1))))
End Function

?EOMONTH(#01/01/2017#,5)
'05/02/2017 

如果您正在编写VBA,则应该更恰当地格式化代码。你没有必要把所有的东西都放在一条线上。还有,“月底”和“下个月初”是不是只隔一天?看起来很奇怪。