Только возврат дней Buisness в пользовательской функции даты в Excel - PullRequest
0 голосов
/ 01 июня 2018

У меня есть дата, которую мне нужно будет увеличить на день, месяц или год от фактической даты.Это основано на списке полей ниже и отличается для каждого ввода.Кроме того, каждая итоговая дата должна быть рабочим, то есть не выходным или праздничным днем.Кроме того, если полученная дата - либо 25 декабря, либо 1 января, то день необходимо перенести на следующий рабочий день (а не на выходной день).

Я создал это в Excel, используя несколько формул, хотя этонемного неуклюжий

Ниже приведен мой набор данных

Рабочий день 15/05/2018

Tenor   Settlement Value    Settlement Period
ON  1   Day
TN  2   Day
SP  2   Day
SN  3   Day
1W  7   Day
2W  14  Day
3W  21  Day
1M  1   Month
2M  2   Month
3M  3   Month

В столбце E - я использую формулу

=IF(D4="Day",$B$1+C4,IF(D4="Month",EDATE($B$1,C4),(TEXT($B$1,"dd/mm/")&(YEAR($B$1)+C4))+0))

В столбце F - я использую формулу

=E4+LOOKUP(WEEKDAY(E4),{1,2,3,4,5,6,7},{1,0,0,0,0,0,2})

В столбце G - я использую формулу

= F4 + IF (И (ИЛИ (ТЕКСТ (F4, "ddmm") = "2512" , ТЕКСТ (F4, "ДДММ") = "0101"), ДЕНЬНЕД (F4)> = 2, ДЕНЬНЕД (F4), <= 6), LOOKUP (ДЕНЬНЕД (F4), {1,2,3,4,5,6,7}, {0,1,1,1,1,3,0}), LOOKUP (ДЕНЬНЕД (F4), {1,2,3,4,5,6,7}, {1,0,0,0,0,0,2})) </p>

В формате HI дата в мм / дд / гггг, и у меня есть желаемый результат.

Storax любезно создал для меня функцию, которая копирует мою формулу Excel в столбце E - в этой теме Увеличивает дату на количество дней, месяцев или лет

Function IncDate(ByVal dt As Date, ByVal add As Long, ByVal dmy As String) As Date
    Select Case UCase(dmy)
        Case "DAY"
            IncDate = DateAdd("d", add, dt)
        Case "MONTH"
                IncDate = DateAdd("m", add, dt)
        Case "YEAR"
                IncDate = DateAdd("yyyy", add, dt)
        Case Else
                IncDate = dt
    End Select

Могу воспользоваться некоторыми советами о том, как я могу включить свои формулы в столбцы F & G, чтобы сделать процесс менее громоздким.

1 Ответ

0 голосов
/ 01 июня 2018

Манипулирование функцией DATE (DateSerial in vba) с помощью функции WORKDAY.INTL , кажется, дает правильные рабочие даты.

Поместите это в E4 и заполните.

=WORKDAY.INTL(DATE(YEAR(B$1)+(D4="year")*C4, MONTH(B$1)+(D4="month")*C4, DAY(B$1)+(D4="day")*C4)-1, 1, 1, holidays)

[праздничные дни] - это именованный диапазон (формулы, определенные имена, определенные имена) со ссылкой на: из,

=Sheet10!$Z$2:INDEX(Sheet10!$Z:$Z, MATCH(1E+99, Sheet10!$Z:$Z))

enter image description here

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