代码之家  ›  专栏  ›  技术社区  ›  iDevlop

dateadd的语法

  •  1
  • iDevlop  · 技术社区  · 15 年前

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

    无论您使用d、w还是y作为period参数,它都会提供相同的结果。

    我尝试了以下代码,在所有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 2009年9月11日2009年9月11日2009年9月11日
    2009年12月9日2009年12月9日2009年12月9日
    2009年9月3日2009年9月13日2009年9月13日2009年9月13日
    2009年9月4日2009年9月14日2009年9月14日2009年9月14日
    2009年9月5日2009年9月15日2009年9月15日2009年9月15日
    2009年9月6日2009年9月16日2009年9月16日2009年9月16日
    2009年9月7日2009年9月17日2009年9月17日2009年9月17日
    2009年9月8日2009年9月18日2009年9月18日2009年9月18日
    2009年9月19日2009年9月19日2009年9月19日

    文件摘录: 返回一个变量(日期),其中包含已添加指定时间间隔的日期。

    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 回复  |  直到 7 年前
        1
  •  4
  •   Oorang    15 年前

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

    Public Sub Test()
        MsgBox CDate(Workday(Date, 3))
    End Sub
    
        2
  •  0
  •   JohnFx    15 年前

    周为“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是要添加的间隔数。

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

        3
  •  0
  •   Buggabill    15 年前

    您的示例将在今天的三个不同版本中添加相同的数字。”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 为了一些工作日的数学

        4
  •  -2
  •   ohboy    9 年前

    dateadd(“w”不能按预期工作-Microsoft确认并在 https://support.microsoft.com/en-us/kb/115489