Синтаксис DateAdd - PullRequest
       8

Синтаксис DateAdd

1 голос
/ 16 сентября 2009

Я пытаюсь использовать 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 09.11.2009 11.09.2009
2 09.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

Выписка из документации: Возвращает вариант (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 ]

4 голосов
/ 16 сентября 2009

Несмотря на запутанный язык документации DateAdd. DateAdd не добавляет рабочие дни. «W» добавит только n количество дней (как вы обнаружили). Вы можете либо свернуть свою собственную функцию, либо сделать следующее: В Excel перейдите в Инструменты> Добавить модули и включите пакет инструментов анализа для VBA. В VBE перейдите в Инструменты> Ссылки и установите ссылку на atpvbaen.xls. Теперь вы можете использовать функцию WorkDay в VBA.

Public Sub Test()
    MsgBox CDate(Workday(Date, 3))
End Sub
0 голосов
/ 07 августа 2015

DateAdd («w» не работает должным образом - Microsoft подтвердила это и опубликовала обходной путь на https://support.microsoft.com/en-us/kb/115489

0 голосов
/ 16 сентября 2009

Ваш пример добавит один и тот же номер к трем различным версиям сегодня. «d» представляет текущую дату. «w» представляет день недели, например 1 для воскресенья (по умолчанию). «у» представляет день года. 16 сентября - день 259 из 365 в этом году.

Чтобы получить то, на что, похоже, вы собираетесь, сделайте следующее:

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 голосов
/ 16 сентября 2009

Это "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

число - это число интервалов, которое вы хотите добавить.

дата - это дата, к которой следует добавить интервал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...