Excel - Ing

 
Vista:

Ing

Publicado por Richard (43 intervenciones) el 05/11/2007 13:21:16
Saludos. Hasta ahora no he podido resolver lo siguiente en excel:
Cómo hacer una función en Vba que pueda, por ejemplo, utilizar como datos de insumo, los que que se señalen en la "Hoja1". Algo similar a lo que utiliza la funcion TIR o Vna, que reconoce los datos que se le señalan???
En otras palabras, cuales son las instrucciones (códigos) necesarias para que se interprete cada una de las celdas señaladas, y asi poder manipularlas??

Me serviría una función definida por el usuario que sea capaz de dar como resultado la suma de un
conjunto de celdas en la "Hoja1" según las que se señalen.( Que permita que las celdas que se señalen puedan estar en cualquier parte de la "Hoja1").

Agadezco cualquier aporte...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ing

Publicado por JuanC (792 intervenciones) el 05/11/2007 13:41:55
si no entendí mal podés usar la función SUMA de Excel...
Ej: =SUMA(A1; B10; C1:C10)

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ing

Publicado por JuanC (792 intervenciones) el 05/11/2007 14:49:46
Gracias por tu interés... Pero lo que busco es como se escribe la instrucción dentro del programa que sea capaz de interpretar las celdas señaladas . Se trata de crear una función nueva que haga lo mismo que SUMA(A1:a10) por ejemplo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ing

Publicado por JuanC (792 intervenciones) el 05/11/2007 15:51:23
es esto lo que querés??...

Public Function MySum(ByVal Rango As Range) As Double
On Error Resume Next
Application.Volatile
MySum = Application.WorksheetFunction.Sum(Rango)
End Function

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ing

Publicado por JuanC (792 intervenciones) el 05/11/2007 18:08:30
Muchísimas gracias desde Colombia. Creo que tu última ayuda solucionará el problema, que mas concretamente, es como hacer para que no tenga que introducir datoxdato sino seleccionando un rango. No lo he probado todavía..... veremos si soy capaz..
Aqui te envío la funcion del problema que calcula la TIR. Tú debes de saber que cuando hay muchos periodos el resultado casi siempre es ERROR, no obstante que le escribas en estimado la respuesta que ya tienes de antemano. La funcion TasaIR tiene como limitante que no puedes introducirle más de 29 periodos....

Function tasaIR(n, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28)
Dim V(200)
Dim csuma(30000)
delta = 0.001
ti = 0.01
Dif = 0.0001
V(1) = a1
V(2) = a2
V(3) = a3
V(4) = a4
V(5) = a5
V(6) = a6
V(7) = a7
V(8) = a8
V(9) = a9
V(10) = a10
V(11) = a11
V(12) = a12
V(13) = a13
V(14) = a14
V(15) = a15
V(16) = a16
V(17) = a17
V(18) = a18
V(19) = a19
V(20) = a20
V(21) = a21
V(22) = a22
V(23) = a23
V(24) = a24
V(25) = a25
V(26) = a26
V(27) = a27
V(28) = a28
V(29) = a29
V(30) = a30
V(31) = a31
V(32) = a32
V(33) = a33
V(34) = a34
V(35) = a35
V(36) = a36
Do
suma = 0
For i = 1 To n
suma = suma + V(i) * (1 + ti) ^ (n - i)
Next i
contador = contador + 1
csuma(contador) = suma
If suma > Dif Then
ti = ti + delta
End If
If suma < -Dif Then
ti = ti - delta
End If
If csuma(contador) > 0 And csuma(contador - 1) < 0 Then
delta = delta * 0.5
End If
Loop Until suma <= Dif And suma >= -Dif
tasaIR = ti
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ing

Publicado por JuanC (792 intervenciones) el 05/11/2007 18:36:51
para evitar usar los 29 periodos podrías usar ParamArray

Function tasaIR(n, ParamArray a())

busca en la ayuda para ver cómo se usa...

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ing

Publicado por JuanC (792 intervenciones) el 05/11/2007 23:51:01
Muchas gracias por todo. Si pude hacerlo con Paramarray con una pequeña variación pero no me permite sino un máximo de 29 periodos y necesito más de 36, a veces 60.
Voy a seguir intentando con la primera opción que me enviastes "MYSUM"....
Sinenbargo abusaré de tu generosidad y tu conocimiento pidiendote por favor , si es posible, que me digas cómo identifico los elementos del Rango para poderlos procesar....
Esto es lo que tengo ahora:

Function TIRdef(ParamArray nums() As Variant)
Dim csuma(3000)
n = UBound(nums()) ' Finds the number of arguments passed to
' the function.
delta = 0.001
ti = 0.01
Dif = 0.0001
Do
suma = 0
For i = 0 To n
suma = suma + nums(i) * (1 + ti) ^ (n - i)
Next i
contador = contador + 1
csuma(contador) = suma
If suma > Dif Then
ti = ti + delta
End If
If suma < -Dif Then
ti = ti - delta
End If
If csuma(contador) > 0 And csuma(contador - 1) < 0 Then
delta = delta * 0.5
End If
Loop Until suma <= Dif And suma >= -Dif
TIRdef = ti
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ing

Publicado por JuanC (792 intervenciones) el 06/11/2007 13:42:03
te diría que me envies el archivo y me expliques "MUY BIEN" qué es
lo que querés hacer
enviame algún ejemplo con datos, cálculos y resultados...
lo de la cantidad de periodos tiene solución (aunque no sé qué son!!!)
Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ing

Publicado por Juanc (792 intervenciones) el 06/11/2007 15:28:08
Muchas gracias por tu interés. Con las orientaciones y recursos que me sugeristes, felizmente pude resolver el asunto.
Lo que pretendía era hacer un FUNCION que hiciera lo mismo que la FUNCION TIR de Excel, debido a los problemas que se me presentaban al usarla cuando había mas de 30 periodos.
Te voy a eviar a tu Email lo que hice con un ejemplo . No se si se puesda enviar como documento adjundo en esta nota.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar