0

对不起,如果这个问题很愚蠢,因为我是 VBA 新手。

问题一开始就出现了,因为 excel IRR 无法计算模拟中的变化列(仅计算初始值而不是以下循环中的值)。所以我选择了 VBA IRR 函数,但它的双数组要求似乎是另一个主要问题。

当我尝试将范围读入变量数组,并以某种方式将每个数组元素转换为双精度类型,然后在 VBA IRR 函数中使用它们时,代码仍然显示“类型不匹配”。我也尝试过数组,但同样的错误结果。

有没有办法让工作表 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)
4

1 回答 1

0

可能有比这更优雅的方法,但此示例在计算结果之前遍历源数据范围并将值转换为双精度数组:

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

和一个功能版本...

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

示例输出:

在此处输入图像描述

于 2020-07-06T00:46:00.110 回答