2017-08-26 129 views
1

我剛剛意識到,您可以通過將括號中的引用集合括起來(即= IRR((C18:C62,$ B $ 1))這是一個有用的功能,但是從各種嘗試中,我得出結論,當範圍參考包含另一個工作簿或者使用偏移功能構建範圍時,它不起作用。是否有人知道解決方法這個或另一種方式來處理這個問題在另一張紙上有非連續範圍的Excel IRR公式

感謝您對所有您的幫助

回答

2

IRR功能:?!

語法時才: 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個不同範圍組成的單個參數。

使用OffsetIRR中。

當範圍與偏移功能

構建良好的它不工作,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函數將起作用。這意味着即使在Sheet1中輸入了公式,=IRR(Sheet2!A1:A5)也會得到期望的結果。但是,IRR不允許使用一個公式中多個工作表的範圍。因此,如果輸入Sheet1,則=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

enter image description here

Sheet2

enter image description here

相關問題