【问题标题】:Retutn only Buisness days in custom date function in excel在excel中的自定义日期函数中仅返回工作日
【发布时间】: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。

标签: excel function date vba


【解决方案1】:

使用WORKDAY.INTL function 操作 DATE 函数(vba 中的 DateSerial)似乎可以生成正确的营业日期。

把这个放到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)

[holidays] 是一个命名范围(Formulas、Defined Names、Defined Name),带有Refers To: of,

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

【讨论】:

  • 感谢您的回复。我已复制您的说明,但我返回值 #VALUE!。您能否详细说明这一点 - [holidays] 是一个命名范围(公式、定义名称、定义名称),带有一个引用:of,我为假期创建了一个命名范围。
  • 如果您返回#value!然后你的数据有些歪斜,可能是真实数字应该是的文本。如果您创建了一个名为 range 的假期,那么您应该没问题;我只是展示了如何使其动态化。
  • 感谢您的帮助 - 我的问题是,在我定义的名称范围内,我同时包含了日期和导致函数退出的日期的叙述。一旦我正确地重命名了范围,它就可以发挥作用了 - 再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
相关资源
最近更新 更多