【发布时间】:2018-08-17 08:00:48
【问题描述】:
我曾使用过另一种编程语言,但 VBA 对我来说是一个相对较新的平台。我知道我想要执行的算法,但是我遇到了一些问题。
我一直在尝试为债券的市场收益率创建一个财务模型,由于在事物的自然过程中,我需要使用求解器,所以我决定使用工作表函数 IRR,其数组定义为FOR 循环和案例结构如图所示。我之前只是在 VBA 中使用 IRR 函数,它显示了错误-“类型不匹配:需要数组或用户定义的类型”。
但是,现在我没有看到任何错误,但我的函数说其中一个参数是错误的数据类型。如果有人能告诉我我在这里做错了什么,我将不胜感激。
Function Market_Yield(Clean_Price As Variant, Number_of_Payments As Integer, Coupon As Variant, Face As Variant, AccIn As Variant) As Variant
Dim Payment As Variant
For i = 0 To Number_of_Payments
Select Case i
Case Is = 0
Payment(i) = -Clean_Price
Case Is = Number_of_Payments - 1
Payment(i) = (AccIn / Coupon) + (Coupon * Face)
Case Is = Number_of_Payments
Payment(i) = ((Coupon * Face) - (AccIn)) + (((Coupon * Face) - (AccIn)) / Coupon)
Case Else
Payment(i) = Coupon * Face
End Select
Next i
Market_Yield = Application.WorksheetFunction.IRR(Payment(), 0.1)
End Function
【问题讨论】:
-
你能举个例子吗?
-
我们不习惯你的金融词汇。你能避免如果,解释它或参考解释吗?
-
并根据需要将 () 从 Payment() 中删除。
-
你好 QHarr。您是指输出的快照吗?
-
我的意思是一些重现错误的测试值。这样做所需的最低金额。
标签: vba excel for-loop switch-statement