Macro: Transformar una matriz en un rango

03/03/2008 - 21:19 por JesusB | Informe spam
Hola a todos,

En un procedimiento (sub) tengo una matriz y quiero llamar a una funcion
(function) que recoge el argumento como rango, y logicamente me da error de
compilacion (el tipo de argumento ByRef no coincide). Me gustaria poder
transformar mi matriz en un rango para poder meterla en la funcion.

Es posible?

Muchas gracias!

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
04/03/2008 - 00:16 | Informe spam
hola, Jesus !

Mostrar la cita
si transcribes ambos procedimientos (el sub y el function) y la forma en que usas uno y otro...
tendrias mas probabilidades de que alguna propuesta se acercara a "la realidad" :))

saludos,
hector.
#2 JesusB
06/03/2008 - 11:46 | Informe spam
Hola Hector!!
Mostrar la cita
aqui te mando el codigo con comentarios explicando su funcionamiento, ojala
alguien sepa como hacer lo que necesito, muchas gracias!!

Sub Tir2()
'Esto es un programa para calucular la tir de un prestamo

Dim Year As Integer
Dim Paym As Double
Dim Flow()
Dim n As Integer
Dim i As Integer
Dim Cons_var
Dim x As Integer

'Primero adquiero todo el input del usuario

Year = InputBox("Introduzca el periodo de su prestamo", "PASO 1 PARA
CALCULAR LA TIR")
ReDim Flow(Year) 'Aqui redimensionamos la matriz una vez que ya sabemos los
periodos
Cons_var = MsgBox("¿Las mensualidades son constantes?", vbYesNo)

'Cargo mi matriz con todos los montos en cada periodo

Flow(0) = -Abs(InputBox("Introduzca la inversion inicial de su prestamo: ",
"PASO 2 PARA CALCULAR LA TIR"))
If Cons_var = vbNo Then
For i = 1 To Year
Flow(i) = InputBox("Introduzca el flujo en el año ", i)
Next i
Else
Paym = InputBox("Introduzca la mensualidad de su prestamo : ", "PASO 4
PARA CALCULAR LA TIR")
For i = 1 To Year
Flow(i) = Paym
Next i
End If

' mi problema es aqui cuando llamo a la funcion TIR que utiliza un rango y
yo necesito meter la data de la matriz Flow()

MsgBox ("La TIR es " & TIR(Flow()))

End Sub




Function MiTIR(FC As Range) As Double
'Esta funcion calcula la TIR llamando a la funcion VAN de abajo, ambas
utlizan un argumento en rango

Dim a As Double
Dim b As Double
Dim m As Double

a = 0
b = 1
m = (a + b) / 2


Do While Abs(VAN(m, FC)) > 0.00001

If VAN(m, FC) < 0 Then

b = m
Else
a = m
End If

m = (a + b) / 2

Loop
TIR = m
End Function

Function VAN(k As Double, FC As Range)

'Esta es la funcion VAN necesaria para calcular la TIR de arriba

Dim S As Double
Dim i
For i = 0 To FC.Count
S = S + FC(i, 1) / (1 + k) ^ i
Next i

VAN = S
End Function
#3 Héctor Miguel
06/03/2008 - 23:27 | Informe spam
hola, Jesus !

Mostrar la cita
1) el codigo que expones es (practicamente) "inutilizable" y por mas de dos "razones" (p.e.)
- llamas a la funcion TIR pero la has nombrado como MiTIR
- indicas que deben tomarse rangos como argumentos y ya sabemos que necesitas matrices
- si NO podran ser rangos (efectivamente) hay dos o tres "detalles" que dejaran de funcionar en los procedimientos :-((

2) podrias exponer dos o tres ejemplos de los datos que proporcionarias en los Inputboxes y los resultados esperados ?

saludos,
hector.

__ el codigo expuesto __
Mostrar la cita
#4 JesusB
08/03/2008 - 17:28 | Informe spam
hola Hector!

Muchas gracias por tu apoyo.

En primer lugar, siento lo de la incoherencia en los nombres, en realidad lo
cambie abajo porque me di cuenta que TIR era un nombre reservado y se me
olvido cambiarlo arriba. Las dos deberian ser MiTir.

Aqui te mando 2 posibles inputs:

1)
1. 4 años
2. Inversion inicial: -4000
3. Flujo año 1: 1400
4. Flujo año 2: 1300
5. Flujo año 3: 1200
6. Flujo año 4: 1100

El resultado deberia salir en un InputBox como "La Tir es 10%"

2)
1. 7 años
2. Inversion inicial: -8000
3. Flujo año 1: 4000
4. Flujo año 2: 3000
5. Flujo año 3: 1500
6. Flujo año 4: 500
7. Flujo año 5: 250
8. Flujo año 6: 125
9. Flujo año 7: 75

El resultado deberia salir en un InputBox como "La Tir es 8,89%"

Muchas gracias de nuevo.

saludos,
jesus

"Héctor Miguel" escribió:

Mostrar la cita
#5 JesusB
08/03/2008 - 17:31 | Informe spam
en realidad las inversiones no hay que ponerlas en negativo dado que ya las
conbierto en el programa.

"JesusB" escribió:

Mostrar la cita
Ads by Google
Search Busqueda sugerida