Excel IRR公式,在不同的工作表上具有非连续范围

Excel IRR公式,在不同的工作表上具有非连续范围,excel,excel-formula,Excel,Excel Formula,我刚刚意识到,可以通过将引用集合括在括号中(即=IRR((C18:C62,$B$1))来引用IRR excel公式中的非连续范围。这是一个有用的功能,但从各种尝试中,我得出结论,当范围引用包含另一个工作表/工作簿或当范围使用偏移函数构造时,它不起作用。是否有人知道解决此问题的方法或解决此问题的其他方法 感谢您的帮助!IRR功能: Sytax:IRR(值,[猜测]) 假设数据在范围A1:A5和范围B1内,用于计算IRR 很明显,=IRR(A1:A5)将给出正确的结果。但是=IRR(A1:A5,B1

我刚刚意识到,可以通过将引用集合括在括号中(即=IRR((C18:C62,$B$1))来引用IRR excel公式中的非连续范围。这是一个有用的功能,但从各种尝试中,我得出结论,当范围引用包含另一个工作表/工作簿或当范围使用偏移函数构造时,它不起作用。是否有人知道解决此问题的方法或解决此问题的其他方法


感谢您的帮助!

IRR功能:

Sytax:IRR(值,[猜测])

假设数据在
范围A1:A5
范围B1
内,用于计算
IRR

很明显,
=IRR(A1:A5)
将给出正确的结果。但是
=IRR(A1:A5,B1)
使excel假定
B1
作为语法状态是公式的
[guess]
参数,因此给出的结果与
=IRR(A1:A5)
相同。现在,如果在公式中添加另一个范围,如
=IRR(A1:A5,B1,C1)
,excel将给出错误,说明输入的参数过多。。因此,对于非连续范围,所有范围都需要用括号括起来,如
=IRR((A1:A5,B1))
(如您在问题中所述)。这使得excel将其解释为包含两个不同范围的单个参数

IRR
中使用
Offset

当使用偏移函数构造范围时,它不起作用

嗯,
IRR
确实支持
OFFSET
功能

=IRR(偏移量(A1,0,0,5))
=IRR(A1:A5)

=IRR((偏移量(A1,0,0,5),偏移量(A1,0,1))
=IRR((A1:A5,B1))

以上两个使用偏移量的公式将给出正确的结果

IRR
中使用多张图纸的范围

当范围引用包含另一个工作表/工作簿时,它不起作用

当您在一个公式中使用不同的工作表时,这是正确的。但是,如果您仅引用一个工作表中的范围,并且与当前工作表(输入公式的工作表)不同,则
IRR
函数将起作用。这意味着
=IRR(Sheet2!A1:A5)
即使在
表单1
中输入公式,也会给出所需的结果。但是,
IRR
不允许在一个公式中使用多个工作表的范围。因此,
=IRR((A1:A5,表单2!B1))
如果在
表单1
中输入,则不正确

因此,要使用不同工作表中的多个范围,可以在VBA中使用UDF(用户定义函数)

Function IRR_DEMO(rng1 As Range, ParamArray rng2() As Variant) As Double
    Dim elem As Variant
    Dim i As Long, cntr As Long
    Dim arr() As Double

    ReDim arr(1 To rng1.count) As Double    'set size of arr as per rng1
    cntr = 1

    For Each elem In rng1                   'first range
        arr(cntr) = elem.Value              'put range values in array
        cntr = cntr + 1
    Next elem
    For i = LBound(rng2) To UBound(rng2)    'all the ranges apart from first range and in rng2
        ReDim Preserve arr(1 To UBound(arr) + rng2(i).count) As Double 'reset size of arr as per rng2(i)
        For Each elem In rng2(i)
            arr(cntr) = elem.Value          'put range values in array
            cntr = cntr + 1
        Next elem
    Next i
    IRR_DEMO = IRR(arr)                     'use array in IRR
End Function
您可以将上述自定义项用作

=IRR_DEMO(A1:A5)
=IRR_DEMO(A1:A5,B1)
=IRR_DEMO(OFFSET(A1,0,0,5),OFFSET(A1,0,1))
=IRR_DEMO(Sheet2!A1:A5)
=IRR_DEMO(A1:A5,Sheet2!B1)
=IRR_DEMO(Sheet2!A1:A5,Sheet2!B1)
请参见图像以供参考

Sheet1

Sheet2