1

我正在尝试在 VBA 中使用 IRR 函数。IRR() 在 Excel 中运行良好。当我在 VBA 中编写如下脚本时,

a = Array(3, 4, 5)
b = IRR(a, 0.1)

它抱怨“编译错误:类型不匹配:预期数组或用户定义类型”。让我目瞪口呆的是一个 IS 数组。怎么了?


我根据 Pieter Geerkens 重写了函数如下:

option base 1

Function trial()
Dim a(2) As Double, b As Double

a(1) = 1.2
a(2) = 3.4
b = IRR(a(), 0.1)
End Function

我收到错误消息:运行时错误“5”:无效的过程调用或参数。

4

2 回答 2

2

您需要应用Excel Application 对象WorksheetFunction 对象或两者。此外,预计数组中的第一个元素为负数。

    Dim a As Variant, b As Double

    a = Array(-6, 4, 5)

    b = Application.IRR(a, 0.1)
    Debug.Print b

    b = WorksheetFunction.IRR(a, 0.1)
    Debug.Print b

    b = Application.WorksheetFunction.IRR(a, 0.1)
    Debug.Print b

VBE 的即时窗口 ([ctrl]+G) 的结果

 0.305158649140883 
 0.305158649140883 
 0.305158649140883 
于 2016-01-27T01:14:37.190 回答
2

不,a不是数组;它是“包含数组的变体”。VBA 不是 C 类型语言,也没有那些初始化器。试试这个代码:

Dim a(0 To 2) As Double
a(0) = -3#
a(1) = 4#
a(2) = 5#

Dim v As Double: v = irr(a(), 0.1)
于 2016-01-27T01:01:37.100 回答