我刚刚意识到你可以通过在括号中包含一组引用来引用IRR excel公式中的非连续范围(即= IRR((C18:C62,$ B $ 1))。这是一个有用的功能,但是,从各种尝试中,我得出结论,当范围引用包括另一个工作表/工作簿或者使用偏移函数构造范围时,它不起作用。有没有人知道解决这个或另一种解决问题的方法?
感谢您的帮助!
答案 0 :(得分:2)
IRR 功能:
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个不同范围组成的单个参数。
在Offset
中使用IRR
。
当使用偏移函数
构造范围时,它不起作用
好吧,IRR
支持OFFSET
功能。
=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 。但是,如果您仅从一个工作表引用范围并且与当前工作表(您输入公式的工作表)不同,那么IRR
函数将起作用。这意味着即使在=IRR(Sheet2!A1:A5)
中输入公式,Sheet1
也会提供所需的结果。但是,IRR
不允许在一个公式中使用多个工作表中的范围。因此,如果在=IRR((A1:A5,Sheet2!B1))
中输入Sheet1
,则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
不正确。
因此,要使用不同工作表中的多个范围,可以在VBA中使用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)
您可以将以上UDF用作
Sheet1
参见图片以供参考。
Sheet2
{{1}}