Estoy tratando de usar la función IRR en VBA. IRR () funciona bien en Excel. Como lo escribí en VBA de la siguiente manera,

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

Se quejaba de "Error de compilación: falta de coincidencia de tipos: se esperaba una matriz o un tipo definido por el usuario". Lo que me sorprende es un IS una matriz. ¿Qué está mal?


Reescribí la función según Pieter Geerkens de la siguiente manera:

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

Recibo el mensaje de error: Error en tiempo de ejecución '5': argumento o llamada de procedimiento no válida.

1
Hans 27 ene. 2016 a las 03:24

2 respuestas

La mejor respuesta

Debe aplicar el objeto Aplicación de Excel, el objeto WorksheetFunction o ambos. Además, se espera que el primer elemento de la matriz sea negativo.

    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

Resultados de la ventana Inmediato de VBE ([ctrl] + G)

 0.305158649140883 
 0.305158649140883 
 0.305158649140883 
2
user4039065user4039065 27 ene. 2016 a las 01:14

No, a NO es una matriz; es " una variante que contiene una matriz" . VBA NO es un lenguaje de tipo C y no tiene los inicializadores que tienen. Prueba este código:

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)
2
Pieter Geerkens 27 ene. 2016 a las 01:01