DateAdd的语法

时间:2009-09-16 12:48:17

标签: excel vba excel-vba

我正在尝试使用Excel的DateAdd函数来查找下一个工作日

无论是否使用d,w或y作为句点参数,它都会提供相同的结果。

我尝试了以下代码,并在所有3列中获得相同的结果。

Sub test()
    Dim i As Integer
    For i = 1 To 9
        Debug.Print i;
        Debug.Print DateAdd("d", i, #9/10/2009#);
        Debug.Print DateAdd("w", i, #9/10/2009#);
        Debug.Print DateAdd("y", i, #9/10/2009#)
    Next i
End Sub

结果:
    1 11/09/2009 11/09/2009 11/09/2009
    2 12/09/2009 12/09/2009 12/09/2009
    3 13/09/2009 13/09/2009 13/09/2009
    4 14/09/2009 14/09/2009 14/09/2009
    5 15/09/2009 15/09/2009 15/09/2009
    6 16/09/2009 16/09/2009 16/09/2009
    7 17/09/2009 17/09/2009 17/09/2009
    8 18/09/2009 18/09/2009 18/09/2009
    9 19/09/2009 19/09/2009 19/09/2009

从文档中摘录:     返回Variant(Date),其中包含已添加指定时间间隔的日期。

Syntax  
DateAdd(interval, number, date)  
...  
interval Required. String expression that is the interval of time you want to add.   
....  

The interval argument has these settings:  

Setting Description   
yyyy Year   
q Quarter   
m Month   
y Day of year   
d Day   
w Weekday   
ww Week   
...  

4 个答案:

答案 0 :(得分:4)

尽管DateAdd文档的语言令人困惑。 DateAdd 添加工作日。 “W”只会添加 n 天数(如您所发现的那样)。您可以滚动自己的功能,也可以执行以下操作: 在Excel中,转到“工具”>“添加”并打开VBA的分析工具包。 在VBE中,转到工具>引用并设置对atpvbaen.xls的引用。 现在,您可以在VBA中使用WorkDay函数。

Public Sub Test()
    MsgBox CDate(Workday(Date, 3))
End Sub

答案 1 :(得分:0)

一周是“ww”,一年是“yyyy”。

更正后的代码:

Sub test()
    Dim i As Integer
    For i = 1 To 9
        Debug.Print i;
        Debug.Print DateAdd("d", i, #9/10/2009#);
        Debug.Print DateAdd("ww", i, #9/10/2009#);
        Debug.Print DateAdd("yyyy", i, #9/10/2009#)
    Next i
End Sub

来自文档:

DateAdd函数的语法是:

DateAdd ( interval, number, date )

interval是您要添加的时间/日期间隔。它可以是以下值之一:

Value   Explanation
yyyy    Year
q   Quarter
m   Month
y   Day of the year
d   Day
w   Weekday
ww  Week
h   Hour
n   Minute
s   Second

number是您要添加的间隔数。

日期是应添加间隔的日期。

答案 2 :(得分:0)

您的示例会将相同的数字添加到今天的三个不同版本中。 “d”代表当前日期。 “w”表示星期几,例如1表示星期日(默认)。 “y”代表一年中的某一天。 9月16日是今年365天的第259天。

为了得到你想要的东西:

Sub test()
    Dim i As Integer
    For i = 1 To 9
        Debug.Print i;
        Debug.Print DateAdd("d", i, #9/10/2009#)    ' adds i days
        Debug.Print DateAdd("ww", i, #9/10/2009#)   ' adds i weeks
        Debug.Print DateAdd("yyyy", i, #9/10/2009#) ' adds i years
    Next i
End Sub

输出:

 1 9/11/2009 9/17/2009 9/10/2010 
 2 9/12/2009 9/24/2009 9/10/2011 
 3 9/13/2009 10/1/2009 9/10/2012 
 4 9/14/2009 10/8/2009 9/10/2013 
 5 9/15/2009 10/15/2009 9/10/2014 
 6 9/16/2009 10/22/2009 9/10/2015 
 7 9/17/2009 10/29/2009 9/10/2016 
 8 9/18/2009 11/5/2009 9/10/2017 
 9 9/19/2009 11/12/2009 9/10/2018 

编辑:看看here一些工作日数学

答案 3 :(得分:-2)

DateAdd(" w"没有按预期工作 - 微软承认并在https://support.microsoft.com/en-us/kb/115489

发布了一个解决方法