2009-09-16 53 views
1

我正在嘗試使用Excel的DateAdd函數來查找下一個工作日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 2009-09-19 2009-09-19 2009-09-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 
... 
+0

張貼瞭解決方法,我知道什麼WW和YYYY做到這一點不是問題 我想!下一個工作日(或工作日) – 2009-09-16 13:03:47

+0

@Patrick工作日!=工作日增加一個工作日到一個日期只需增加到一週的第二天,例如在星期五加一個星期六就表示星期六的日期。有一天,你能指出任何文件,否則會建議? – Glen 2009-09-16 13:11:08

+0

編輯我的答案一點點... – Buggabill 2009-09-16 13:21:55

回答

4

看看here儘管DateAdd文檔有令人困惑的語言。 DateAdd確實不是添加工作日。「W」將只添加n天數(正如您發現的那樣)。您可以滾動您自己的功能,也可以執行以下操作: 在Excel中,轉至工具>添加入,然後打開VBA的分析工具包。 在VBE中,轉至工具>參考並設置對atpvbaen.xls的引用。 現在您可以使用VBA中的WorkDay功能。

Public Sub Test() 
    MsgBox CDate(Workday(Date, 3)) 
End Sub 
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) 

間隔是你希望的時間/日期間隔加。它可以是以下值之一:

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 

數字是您希望添加的間隔數。

日期是應該添加間隔的日期。

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 

編輯:取一段工作日數學

+0

錯誤。參數代表一個時間間隔,「w」是工作日,正如文檔中所述。 – 2009-09-16 13:05:44

+0

從文檔... 若要將日期添加到「日期」,您可以使用Year of Day(「y」),Day(「d」)或Weekday(「w」) DateAdd函數不會返回無效日期。下面的示例向1月31日添加一個月: DateAdd(「m」,1,「31-Jan-95」) 在這種情況下,DateAdd返回28-Feb-95,而非Feb-95。如果日期是96年1月31日,它將返回96年2月29日,因爲1996年是閏年。 來自我的直接窗口: ? DateAdd(「ww」,2,#9/10/2009#) 9/24/2009 – Buggabill 2009-09-16 13:17:47