excel中的WORKDAY函数不接受Holiday参数的范围并集

时间:2016-03-21 06:48:01

标签: excel vba excel-vba excel-formula excel-2010

=WORKDAY(42429, 1, A10:A15+A20:A22)

此公式在Excel中不起作用,并且出现#VALUE错误。如果我只为Holidays参数使用一个范围 - 它可以正常工作:

=WORKDAY(42429, 1, A10:A15)

两个范围都包含三月份的随机日期(42429是二月的最后一天)。

如何让它与单独的范围一起使用,以便它既能满足它们又不仅仅是其中之一?

我尝试创建一个小的VBA脚本来手动组合范围,然后使用该组合的结果作为WORKDAY函数的Holiday参数:

Function Test1(holidays As Range, timeOffs As Range) As Long()
    Dim r() As Long
    Dim h As Range, t As Range
    Dim i As Integer
    i = 1

    ReDim r(1 To holidays.Cells.Count + timeOffs.Cells.Count)

    For Each h In holidays.Cells
        r(i) = h.Value
        i = i + 1
    Next h

    For Each t In timeOffs.Cells
        r(i) = t.Value
        i = i + 1
    Next t

    Test1 = r

End Function

然后

=WORKDAY(42429, 1, Test1(A10:A15, A20:A22))

然而,这会产生完全相同的结果。

我调试了我的小脚本,我可以看到返回的对象是一个Long的数组,它具有我想要的所有值,但是由于某种原因Excel不喜欢这个脚本及其输出,但仍然给了我#VALUE错误。

非常感谢任何提示!

2 个答案:

答案 0 :(得分:1)

我会使用=Workday.Intl(startDate,endDate,[Weekend],[Holidays])文档here,或者如果由于旧版=NETWORKDAYS(startDate,endDate,[Holidays])文档Here而不存在,则可能必须使用Ctl + Shift的数组公式确认+输入

答案 1 :(得分:0)

试试这个:

=WORKDAY(startDate,1,SMALL((Rng1,Rng2,Rng3),ROW(INDIRECT("1:"&COUNT(Rng1,Rng2,Rng3)))))

SMALL能够处理输入的多个参数,并提供一个数组作为输出。

来自here