Excel IRR公式在不同的工作表上具有不连续的范围
我刚刚意识到你可以在IRR excel公式中引用非连续的范围,把括号括起来(即= IRR((C18:C62,$ B $ 1))。这是一个有用的特性,但是从各种尝试,我得出的结论是,当范围参考包含另一个工作表/工作簿,或者当使用偏移量函数构build范围时,它不起作用。有没有人知道解决这个或另一种方法来解决这个问题?
谢谢你的帮助!
IRRfunction:
Sytax: IRR(值,[猜测])
假设数据在Range A1:A5
和Range 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
确实支持OFFSET
function。
=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公式)不同,则IRR
function将起作用。 这意味着即使在Sheet1
input了公式, =IRR(Sheet2!A1:A5)
也会给出所需的结果。 但是, IRR
不允许在一个公式中使用多个工作表中的范围。 因此,如果在Sheet1
input=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