![](/img/trans.png)
[英]Variant array with string in first index - overwrite that with double - type mismatch
[英]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.