簡體   English   中英

將數組傳遞給 VBA 中的 IRR 函數。 不斷收到錯誤“編譯錯誤:類型不匹配:需要數組或用戶定義的類型。”

[英]Passing an array into the IRR function in VBA. Keep getting the error "Compile error: Type mismatch: array or user-defined type expected."

我正在計算 VBA 中數組的 IRR。 這是我丑陋的代碼:

Dim iRRArray() As Variant
Erase iRRArray()
ReDim iRRArray(garageLife)

Dim i As Integer
i = 0

Do While i <= garageLife
    Dim difference As Double
    difference = (Worksheets("IRR").Cells(k + 1, i).Value - Worksheets("IRR").Cells(defender, i).Value) * -1
    
    iRRArray(i) = difference

    i = i + 1
Loop

Dim iRRValueTemp As Variant
iRRValueTemp = IRR(iRRArray(), 0.1)

(加載到“差異”變量中的混亂只是根據工作表中的單元格將值加載到數組中。)

當我在電子表格中使用 IRR 函數時,這組特定的數據在 IRR 函數中工作得很好。 但是,當我嘗試運行宏時,它在包含 IRR 函數的行上給了我“編譯錯誤:類型不匹配:預期的數組或用戶定義類型”。 這讓我很困惑,因為我加載到 IRR 中的顯然是一個數組......

我試過的:

  1. Dim 和 ReDim iRRArray 的各種組合(相同的錯誤)
  2. iRRArray() 與 iRRArray,在 IRR 函數和定義中(相同的錯誤)
  3. 將完全不同的數組傳遞給 IRR 函數(同樣的錯誤)

是的,該數組確實包含至少一個符號變化。

提前致謝!

您的調用iRRValueTemp = IRR(iRRArray, 0.1)調用Office-VBA IRR 函數 但這需要一個Double數組,而不是一個Variant數組。

Application.IRRWorksheetFunction.IRR可以使用Variant數組。

Sub test()

 Dim iRRArray() As Double
 'Dim iRRArray() As Variant
 ReDim iRRArray(9)

 iRRArray(0) = -3
 Dim i As Long
 For i = 1 To 9
  iRRArray(i) = 1 + i / 10
 Next

 Dim iRRValueTemp As Variant
 iRRValueTemp = IRR(iRRArray, 0.1) 'will only work using Dim iRRArray() As Double
 'iRRValueTemp = WorksheetFunction.IRR(iRRArray, 0.1)
 'iRRValueTemp = Application.IRR(iRRArray, 0.1)

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM