mejorar mi codigo

02/07/2009 - 19:34 por j_lete | Informe spam
Hola grupo, tengo la siguente funcion que utilizo para actualizar cantidades
a disttintos tipos de interes de forma acumulada.
Las cantidades son datos que tengo e una hoja de calculo y se las paso a la
funcion.
Me gustaria saber como poder hacer esta funcion utilizando arrays, es decir,
un aray para los importes y otro para los porcentajes.

Gracias anticipadas por la ayuda que me puedan prestar.

Function ActualizaImp (imp1, imp2, imp3, imp4, imp5, imp6, imp7, imp8 As
Double) As Double

Dim A As Double, B As Double, C As Double, D As Double, E As Double, F As
Double, G As Double
Dim H As Double

PORC1 = 0.016
PORC2 = 0.027
PORC3 = 0.022
PORC4 = 0.017
PORC5 = 0.012
PORC6 = 0.012
PORC7 = 0.014
PORC8 = 0.021

A = ((((((((imp8 * (1 + PORC8)) * (1 + PORC7)) * (1 + PORC6)) * (1 + PORC5))
* (1 + PORC4)) * (1 + PORC3)) * (1 + PORC2)) * (1 + PORC1))
B = (((((((imp7 * (1 + PORC7)) * (1 + PORC6)) * (1 + PORC5)) * (1 + PORC4))
* (1 + PORC3)) * (1 + PORC2)) * (1 + PORC1))
C = ((((((imp6 * (1 + PORC6)) * (1 + PORC5)) * (1 + PORC4)) * (1 + PORC3)) *
(1 + PORC2)) * (1 + PORC1))
D = (((((imp5 * (1 + PORC5)) * (1 + PORC4)) * (1 + PORC3)) * (1 + PORC2)) *
(1 + PORC1))
E = ((((imp4 * (1 + PORC4)) * (1 + PORC3)) * (1 + PORC2)) * (1 + PORC1))
F = (((imp3 * (1 + PORC3)) * (1 + PORC2)) * (1 + PORC1))
G = (imp2) * 1
H = (imp1) * 1

ActualizaImp = A + B + C + D + E + F + G + H
End Function

Preguntas similare

Leer las respuestas

#21 KL
06/07/2009 - 20:09 | Informe spam
HM,

Perdona que te haya hecho trabajar explicando por que no seria logica mi
preferencia, porque lo que realmente quise decir era lo de poner el valor
mas antiguo en A1 :-))))))

Saludos,
KL

"Héctor Miguel" wrote in message
news:Ov87sFm$
hola, KL !

- si 1 es el mas actual... donde lo pondrias ? (A1 o A8, sabiendo que el
siguiente "mas actual" reemplazara al "1" anterior)



Salvo alguna consideracion especial y por defecto - en A1



- seria la inversa de un proceso tradicional/practico/... de registro de
datos
donde siempre el "mas actual" es el que se va poniendo al final del
listado (p.e.)
ventas (ene...dic), inventarios (el ultimo registro es el mas reciente),
etc.

- implica insertar una fila y modificar toda formula que "tenia" una
referencia inicial
(cada vez y a partir de A1, a menos que utilices referencias indirectas)

- salvo alguna consideracion especial, lo presentaria en orden inverso (?)

por esto es que hacia el comentario del orden de registro (usos y
costumbres, quizas ?)

saludos,
hector.

Respuesta Responder a este mensaje
#22 Héctor Miguel
06/07/2009 - 20:44 | Informe spam
hola, KL !

Perdona que te haya hecho trabajar explicando por que no seria logica mi preferencia
porque lo que realmente quise decir era lo de poner el valor mas antiguo en A1 :-))))))



solo comente lo mismo (pero simplificado) expresado en mi tercer mensaje a Alexander (punto 5)
(o sea, no me has hecho trabajar... ni "de mas", ni "por nada") :D

saludos,
hector.

__ previo __
- si 1 es el mas actual... donde lo pondrias ? (A1 o A8, sabiendo que el siguiente "mas actual" reemplazara al "1" anterior)



Salvo alguna consideracion especial y por defecto - en A1



- seria la inversa de un proceso tradicional/practico/... de registro de datos
donde siempre el "mas actual" es el que se va poniendo al final del listado (p.e.)
ventas (ene...dic), inventarios (el ultimo registro es el mas reciente), etc.

- implica insertar una fila y modificar toda formula que "tenia" una referencia inicial
(cada vez y a partir de A1, a menos que utilices referencias indirectas)

- salvo alguna consideracion especial, lo presentaria en orden inverso (?)

por esto es que hacia el comentario del orden de registro (usos y costumbres, quizas ?)
Respuesta Responder a este mensaje
#23 Alexander Chacin
06/07/2009 - 21:23 | Informe spam
Buenas tardes KL

Lo que haces mal es pensar, apunta antes de disparar

Como comprenderás la función no adivina, si le introdeces una data, la
considera válida y obtiene un resultado. Como entenderás, si cambias lo
valores, el resultado en general cambiará tambien. Invertir el orden de la
matriz de datos, es una manera de cambiar esos valores

Les recomiendo a los dos, nuevamente que comparen la función original con mi
propuesta, hay un detalle bien curioso que extrañamente se les ha escapado a
ambos y es que si usan lo misma data ( del 1 al 8 y del 8 al 1) tanto en mi
propuesta (ActualizaImp2) como en la funcíón original (ActualizaImp) se
obtienen los mismos resultados en las dos funciones

Imagino Héctor que conociendo esta información, le escribirás a j_lete y le
dirás que su código está mal porque al invertir los valores el resultado
cambia. En todo momento traté de simplificar la función original pero
obviamente sin alterar los resultados que dicha función genera y en ese
sentido "ActualizaImp2" arroja los mismos resultados que "ActualizaImp" para
la misma data de entrada, que creo estaba implícito en la solicitud de
j_lete

Agradezco a KL el proporcionar un ejemplo objetivo que puede ser discutido,
en lugar de vagas sospechas. Espero aclarar el punto, de no ser así, espero
nuevos ejemplos objetivos que muestren los errores, que seguramente, podrá
tener mi propuesta

Saludos
Alexander Chacin



"KL" escribió en el mensaje de noticias
news:
Hola chicos,

Me vais a perdonar, pero...

Introduzco valores de 1 a 8 en A1:A8 y =ActualizaImp2(A1:A8) me devuelve
39.7720491242448
Introduzco valores de 8 a 1 en B1:B8 y =ActualizaImp2(B1:B8) me devuelve
37.9455311958239

Que es lo que hago mal? :-))))

Saludos,
KL
Respuesta Responder a este mensaje
#24 KL
06/07/2009 - 22:23 | Informe spam
Veras Alexander,

Lo de pensar nunca ha sido mi fortaleza ;-( . Eso si, tampoco veo necesidad
de malgastar las balas.

Gracias a Dios, estas tu para salvarme, al renegar de tu argumento tan
brillante como oportuno de

"El orden de las multiplicaciones no altera el producto"

y agarrarte a los posibles defectos de la funcion original (yo no he sido!),
lo cual corrobora perfectamente tu acertada afirmacion:

"Por lo que no importa el orden de la multiplicación, entiendo que los
errores de redondeo afectarán, pero no creo que pesen tanto en el resultado
final"

Para que hacer pruebas si ya sabes que en cualquier caso llevas tu la razon.
Enhorabuena por ese rigor cientifico modelico!

Sigue asi y mucha suerte,
KL
Respuesta Responder a este mensaje
#25 Héctor Miguel
06/07/2009 - 22:43 | Informe spam
hola, Alexander ! (crei que ya habias dado por "zanjado" el tema y que tu postura es "inamovible")

Buenas tardes KL
Lo que haces mal es pensar, apunta antes de disparar



(aunque ya te ha respondido KL...)
lo unico que hizo KL es invertir el orden de los factores (posibilidad planteada en mis comentarios)

Como comprenderás la función no adivina, si le introdeces una data, la considera válida y obtiene un resultado.
Como entenderás, si cambias lo valores, el resultado en general cambiará tambien.
Invertir el orden de la matriz de datos, es una manera de cambiar esos valores



esta parte no te la voy a discutir, es parte de tu "postura", aunque sigues sin (querer) ver diferentes usos/costumbres/...
es cierto que una funcion NO "adivina" (pero el programador SI puede anticipar/prevenir/corregir/...)

Les recomiendo a los dos, nuevamente que comparen la función original con mi propuesta
hay un detalle bien curioso que extrañamente se les ha escapado a ambos y es que si usan lo misma data
( del 1 al 8 y del 8 al 1) tanto en mi propuesta (ActualizaImp2) como en la funcíón original (ActualizaImp)
se obtienen los mismos resultados en las dos funciones
Imagino Héctor que conociendo esta información, le escribirás a j_lete y le dirás que su código está mal
porque al invertir los valores el resultado cambia.



aqui... UNO de TUS errores consiste en perder de vista (al menos) DOS de los puntos diferentes entre TU funcion y la de OP
- TU funcion siempre tomara los datos de un rango en orden descendente ([A1]...[A8])
- la funcion de OP utiliza argumentos INDIVIDUALES, por lo tanto, en la funcion "original" podrias pasarlos [A1]...[A8] o a la inversa

ademas, OTRO de TUS errores consiste (otra vez) en NO (querer) ver que en un arreglo de datos (y la diferente "forma" de argumentos)
- TU argumento tomado (rigidamente) con el orden [A1]...[A8] NO distingue si el usuario pone el "mas reciente" en [A8]

- con los argumentos "pasados" individualmente (obviamente) la funcion de OP NO VA A FALLAR (los puede pasar de [A8]...[A1])

En todo momento traté de simplificar la función original pero obviamente sin alterar los resultados que dicha función genera
y en ese sentido "ActualizaImp2" arroja los mismos resultados que "ActualizaImp" para la misma data de entrada
que creo estaba implícito en la solicitud de j_lete



ve y (si quieres/puedes/...) analiza los puntos anteirores (probablemente "amplies" la vista hacia otros horizontes)

Agradezco a KL el proporcionar un ejemplo objetivo que puede ser discutido, en lugar de vagas sospechas.
Espero aclarar el punto, de no ser así, espero nuevos ejemplos objetivos que muestren los errores
que seguramente, podrá tener mi propuesta



esto seria (siempre y cuando) si TU tienes la disposicion de "mente abierta" y abandonas posturas "radicales" (o "inamovibles" ?)

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida