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

我刚刚意识到你可以在IRR excel公式中引用非连续的范围,把括号括起来(即= IRR((C18:C62,$ B $ 1))。这是一个有用的特性,但是从各种尝试,我得出的结论是,当范围参考包含另一个工作表/工作簿,或者当使用偏移量函数构build范围时,它不起作用。有没有人知道解决这个或另一种方法来解决这个问题?

谢谢你的帮助!

IRRfunction:

Sytax: IRR(值,[猜测])

假设数据在Range A1:A5Range B1计算IRR

显而易见=IRR(A1:A5)会给出正确的结果。 但是=IRR(A1:A5,B1)使得excel假设B1[guess]公式的参数作为语法状态,因此给出的结果与=IRR(A1:A5) 。 现在,如果在公式中添加另一个范围(例如=IRR(A1:A5,B1,C1) ,则excel将提供错误,说明too many arguments entered 。 因此,对于非连续的范围,所有的范围需要用括号括起来=IRR((A1:A5,B1)) (正如你在问题中提到的那样)。 这使Excel将其解释为由2个不同范围组成的单个参数。

IRR使用Offset量。

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

那么, IRR确实支持OFFSETfunction。

=IRR(OFFSET(A1,0,0,5))=IRR(A1:A5)

=IRR((OFFSET(A1,0,0,5),OFFSET(A1,0,1)))=IRR((A1:A5,B1))

以上两个公式使用Offset会给你正确的结果。

使用IRR多个工作表的范围

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

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

因此,要使用不同工作表中的多个范围,可以在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 

你可以使用上面的UDF

 =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

在这里输入图像说明