【发布时间】:2018-11-11 08:44:38
【问题描述】:
我有一个日期,我需要将日期从实际日期增加一天、一个月或一年。这基于下面的字段列表,并且每个输入都不同。此外,每个结果日期都必须是工作日,即不是周末或银行假日。此外,如果结果日期是 12 月 25 日或 1 月 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(AND(OR(TEXT(F4,"ddmm")="2512",TEXT(F4,"ddmm")="0101"),WEEKDAY(F4)>=2,WEEKDAY(F4 )
在 H 中,我将日期格式化为 mm/dd/yyyy,我得到了我想要的结果。
storax 为我创建了一个函数,该函数在 E 列中复制了我的 excel 公式 - 在此线程上 Increment a date by a number of days, months or years
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 中提出一些建议,以使过程不那么笨重。
【问题讨论】:
-
在 support.office.com 上研究 workday.intl 和 networkdays.intl。