2009-09-16 3 views
1

Я пытаюсь использовать Excel функцию DateAdd, чтобы найти следующий рабочий день.Синтаксис DateAdd

Он дает тот же результат, если вы используете d, w или y для аргумента period.

Я пробовал следующий код и получал идентичные результаты во всех трех столбцах.

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 
... 
+0

Я знаю, что жв и гггг сделать это не вопрос я хочу получить!. следующий рабочий день (или рабочий день). –

+0

@Patrick weekday! = рабочий день. Добавление дня недели к дате просто увеличивается до следующего дня недели. Например, добавление одного к пятнице дает дату для субботы. Это равносильно добавлению один день. Можете ли вы указать какую-либо документацию, которая могла бы предложить иначе? – Glen

+0

Отредактировал свой ответ немного ... – Buggabill

ответ

4

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

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 

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

дата - дата, в которую должен быть добавлен интервал.

0

Ваш пример добавит то же число к трем различным версиям сегодняшнего дня. «d» представляет текущую дату. «w» обозначает день недели, такой как 1 для воскресенья (по умолчанию). «y» представляет собой день года. 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 

EDIT: Посмотрите here для некоторого рабочего дня математике

+0

Неправильно. Аргументы представляют собой интервал, «w» - будний день, как указано в документации. –

+0

Из документов ... Чтобы добавить дни к «дате», вы можете использовать «День года» («y»), «День» («d») или «День недели» («w») Функция DateAdd не будет вернуть недопустимую дату. В следующем примере добавляется один месяц до 31 января: DateAdd («m», 1, «31-Jan-95») В этом случае DateAdd возвращает 28 февраля-95, а не 31 февраля-95. Если дата 31 января-96, она возвращается 29-фев-96, потому что 1996 год - високосный год. Свое ближайшее место: ? DateAdd («ww», 2, # 9/10/2009 #) 9/24/2009 – Buggabill

-2

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

+0

Этот вопрос уже имеет принятый ответ, который объясняет проблему в вашей ссылке –