Excel IRR公式在不同工作表

时间:2017-08-26 22:14:46

标签: excel excel-formula

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

IRR 功能:

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个不同范围组成的单个参数。

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

enter image description here

{{1}}

enter image description here