簡體   English   中英

從變體類型轉換為 IRR 雙精度類型數組

[英]IRR double type array conversion from a variant type

對不起,如果這個問題很愚蠢,因為我是 VBA 的新手。

問題一開始就出現了,因為 excel IRR 無法計算模擬中的變化列(僅計算初始值而不是以下循環中的值)。 所以我選擇了 VBA IRR function,但它的雙數組要求似乎是另一個主要問題。

當我嘗試將范圍讀入變量數組,並以某種方式將每個數組元素轉換為雙精度類型,然后在 VBA IRR function 中使用它們時,代碼仍然顯示“類型不匹配”。 我也試過 arrays ,但同樣的錯誤結果。

有沒有辦法讓工作表 IRR 與更改單元格一起工作,或者將變體數組轉換為使 VBA IRR 工作的雙精度數組?

這是代碼:

Dim va As Variant 

Dim va_d As Double

va = Worksheets(3).Range("AY16:AY136").Value 

va_d = CDbl(va)

Worksheets(3).Range("H7").Value = IRR(va_d)

可能有比這更優雅的方法,但此示例在計算結果之前遍歷源數據范圍並將值轉換為雙精度數組:

Option Explicit

Public Sub CalcVBAIRR()

    Dim SourceRange As Range
    Dim SourceCell As Range
    Dim TargetRange As Range
    Dim va() As Double
    Dim Counter As Long
    
    Set SourceRange = Worksheets(3).Range("AY16:AY136")
    Set TargetRange = Worksheets(3).Range("H7")

    ReDim va(SourceRange.Cells.Count)

    Counter = 0
    For Each SourceCell In SourceRange
        va(Counter) = CDbl(SourceCell.Value)
        Counter = Counter + 1
    Next
    
    TargetRange.Value = IRR(va)

End Sub

和一個 function 版本......

Public Function CalcIRR2(SourceRange As Range) As Double

    Dim SourceCell As Range
    Dim va() As Double
    Dim Counter As Long
    
    ReDim va(SourceRange.Cells.Count)

    Counter = 0
    For Each SourceCell In SourceRange
        va(Counter) = CDbl(SourceCell.Value)
        Counter = Counter + 1
    Next
    
    CalcIRR2 = IRR(va)

End Function

示例 Output:

在此處輸入圖像描述

暫無
暫無

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

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