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

#11 Héctor Miguel
05/07/2009 - 02:32 | Informe spam
hola, Alexander !

... me gustaria que me ampliaras un poco lo del orden de la multiplicacion, porque sigo sin entenderte ...



1) la funcion de OP "toma" los argumentos de forma ascendente:
Function ActualizaImp (imp1, imp2..., imp8 ...

2) pero... "trabaja" los argumentos de forma inversa (descendente):
A = ((((((((imp8 * (1 + PORC8)) * (1 + PORC7)) .
B = (((((((imp7 * (1 + PORC7)) * (1 + PORC6)) .

3) tu propuesta "cambia" el estilo "argumento-por-argumento" a una matriz de valores "tomados" de un rango:
Public Function ActualizaImp2(Cantidades As Variant, ...

4) OP dice (en respuesta a mis (re)preguntas) que...
">1) el importe mas actual es el 1 y el mas antiguo el 8"

5) trasladando los valores ("imp1-imp8" / Cantidades) a un rango (digamos [A1:A8])

a) no es lo mismo si [A1] = "imp1" <-> o si [A1] = "imp8"

b) si el "imp1" es el mas "actual/reciente/...", (yo ?) me pregunto que es mas "facil" de modificar/extender/actualizar/...
si mantenerlo en [A1] y cuando surja el siguiente "mas actual" INSERTAR una nueva fila a partir de [A1] o...
mantenerlo al final del rango [A8] y para el proximo (simplemente) seguir agregando valores en la siguiente celda [A9] (???)

c) es en este caso que la toma de valores de un rango (de)creciente "sufre" de la necesidad de cambiar "la optica"
en cuanto a la "secuencia" en que debieran ser tomados los valores del rango (cual es el mas antiguo y cual el mas reciente ?)
y aplica tanto a la forma de funcion de tu propuesta, como a la funcion propuesta a OP en mi mensaje), es decir...
NO seria lo mismo apicar TODAS las tasas al primer elemento en el rango que al ultimo (?)

d) por lo anterior es que comentaba acerca de...
"> conocer los "usos y costumbres" de la poblacion a la que el programador dirige su funcion (no ?)"

(no se si te aclaro el por que de "mis" dudas en cuanto a las -posibles/diferentes/...- formas de la programacion de una UDF (?)

saludos,
hector.
Respuesta Responder a este mensaje
#12 Alexander Chacin
05/07/2009 - 13:17 | Informe spam
En efecto aclaras mis dudas y pienso dejarlo de este tamaño, en lo personal
pienso que estás equivocado en lo que respecta a posibles errores derivados
del cambio en el orden que ya hemos mencionado

Revisa bien el código, si tienes el tiempo, pruebalo, si encuentras algo
específico, objetivo y material que comentar lo discutimos

Saludos
Alexander Chacin


"Héctor Miguel" escribió en el mensaje de
noticias news:uwAzdgQ$
hola, Alexander !

... me gustaria que me ampliaras un poco lo del orden de la
multiplicacion, porque sigo sin entenderte ...



1) la funcion de OP "toma" los argumentos de forma ascendente:
Function ActualizaImp (imp1, imp2..., imp8 ...

2) pero... "trabaja" los argumentos de forma inversa (descendente):
A = ((((((((imp8 * (1 + PORC8)) * (1 + PORC7)) .
B = (((((((imp7 * (1 + PORC7)) * (1 + PORC6)) .

3) tu propuesta "cambia" el estilo "argumento-por-argumento" a una matriz
de valores "tomados" de un rango:
Public Function ActualizaImp2(Cantidades As Variant, ...

4) OP dice (en respuesta a mis (re)preguntas) que...
">1) el importe mas actual es el 1 y el mas antiguo el 8"

5) trasladando los valores ("imp1-imp8" / Cantidades) a un rango (digamos
[A1:A8])

a) no es lo mismo si [A1] = "imp1" <-> o si [A1] = "imp8"

b) si el "imp1" es el mas "actual/reciente/...", (yo ?) me pregunto que
es mas "facil" de modificar/extender/actualizar/...
si mantenerlo en [A1] y cuando surja el siguiente "mas actual"
INSERTAR una nueva fila a partir de [A1] o...
mantenerlo al final del rango [A8] y para el proximo (simplemente)
seguir agregando valores en la siguiente celda [A9] (???)

c) es en este caso que la toma de valores de un rango (de)creciente
"sufre" de la necesidad de cambiar "la optica"
en cuanto a la "secuencia" en que debieran ser tomados los valores
del rango (cual es el mas antiguo y cual el mas reciente ?)
y aplica tanto a la forma de funcion de tu propuesta, como a la
funcion propuesta a OP en mi mensaje), es decir...
NO seria lo mismo apicar TODAS las tasas al primer elemento en el
rango que al ultimo (?)

d) por lo anterior es que comentaba acerca de...
"> conocer los "usos y costumbres" de la poblacion a la que el
programador dirige su funcion (no ?)"

(no se si te aclaro el por que de "mis" dudas en cuanto a
las -posibles/diferentes/...- formas de la programacion de una UDF (?)

saludos,
hector.

Respuesta Responder a este mensaje
#13 Héctor Miguel
05/07/2009 - 20:10 | Informe spam
hola, Alexander !

En efecto aclaras mis dudas y pienso dejarlo de este tamaño



(pienso que) "quedarse con la duda"... o seguir investigando, es una prerrogativa personal ;)

en lo personal pienso que estas equivocado en lo que respecta a posibles errores
derivados del cambio en el orden que ya hemos mencionado



puedes hacer la prueba tu mismo, solo prepara dos arreglos de datos cada uno en su rango...
- uno en ascendente: [A1] "imp1"... [A8] "imp8*
- y otro descendente: [D1] "imp8"... [D8] "imp1"
(cada uno con sus correspondientes porcentajes en la columna adyacente: B para A y E para D)

Revisa bien el codigo, si tienes el tiempo, pruebalo
si encuentras algo específico, objetivo y material que comentar lo discutimos



si no lo hubiera probado, no habria expresado mis inquietudes
si no logras obtener resultados diferentes para los arreglos diferentes...
lo que podria hacer es enviarte un modelo con las pruebas sugeridas
(si me confirmas que tu direccion de correo es la que aparece en tus mensajes ?)

saludos,
hector.
Respuesta Responder a este mensaje
#14 Alexander Chacin
05/07/2009 - 22:36 | Informe spam
Buenas tardes Héctor

Tienes toda la razón, dudar o conocer es una opción personal y ya tomé mi
dicisión al respecto, sin embargo me gustaría saber que estás considerando,
envíame tus puebas y sigerencias a este foro, lo que envies a m dirección
personal será publicado aquí, la idea es discutir y que todos participen,¿
no es cierto?

Quiero hacer émfasis en algo, inicialmente haces este comentario

2) pero... "trabaja" los argumentos de forma inversa (descendente):
A = ((((((((imp8 * (1 + PORC8)) * (1 + PORC7)) .
B = (((((((imp7 * (1 + PORC7)) * (1 + PORC6)) .

y ahora haces este

- uno en ascendente: [A1] "imp1"... [A8] "imp8*
- y otro descendente: [D1] "imp8"... [D8] "imp1"



el primero se refiere a iniciar los índices de los arreglos en 1 ó 0, lo
cual es irrelevante porque las operaciones son las mismas, en el segundo
caso inviertes los imp's pero no las celdas [A1] vs [D1], si miras mi
codigo, invertí los dos rangos, no uno solo, de hecho ese ejemplo no lo
entiendo, parece no representar el algoritmo original, tal vez eso y una
posible confución con los paréntesis anidados, que son innecesarios, sea lo
que no permita tener un acuerdo entre ambos. Lo que llama la atención es que
usas los ejemplos que señalé anteriormente, para referirte a una misma
condición, a pesar de que evidentemente son distintos

Saludos
Alexander Chacin

"Héctor Miguel" escribió en el mensaje de
noticias news:O14M0vZ$
hola, Alexander !

En efecto aclaras mis dudas y pienso dejarlo de este tamaño



(pienso que) "quedarse con la duda"... o seguir investigando, es una
prerrogativa personal ;)

en lo personal pienso que estas equivocado en lo que respecta a posibles
errores
derivados del cambio en el orden que ya hemos mencionado



puedes hacer la prueba tu mismo, solo prepara dos arreglos de datos cada
uno en su rango...
- uno en ascendente: [A1] "imp1"... [A8] "imp8*
- y otro descendente: [D1] "imp8"... [D8] "imp1"
(cada uno con sus correspondientes porcentajes en la columna adyacente: B
para A y E para D)

Revisa bien el codigo, si tienes el tiempo, pruebalo
si encuentras algo específico, objetivo y material que comentar lo
discutimos



si no lo hubiera probado, no habria expresado mis inquietudes
si no logras obtener resultados diferentes para los arreglos diferentes...
lo que podria hacer es enviarte un modelo con las pruebas sugeridas
(si me confirmas que tu direccion de correo es la que aparece en tus
mensajes ?)

saludos,
hector.

Respuesta Responder a este mensaje
#15 Alexander Chacin
06/07/2009 - 00:55 | Informe spam
Ok, nos vemos en otra

Cierro el punto al no recibir la información ofrecida

Saludos
Alexander Chacin

"Héctor Miguel" escribió en el mensaje de
noticias news:%23nygZdc$
hola, Alexander !

Tienes toda la razón, dudar o conocer es una opción personal y ya tomé mi
dicisión al respecto



=> me parece mas que suficiente (ademas de que estas en tu derecho) ;)

sin embargo me gustaría saber que estás considerando, envíame tus puebas
y sigerencias a este foro



=> (creo que) seria mas practico (y facil/rapido) si TU haces las pruebas
con base en los "arreglos" (sugeridos)

lo que envies a m dirección personal será publicado aquí, la idea es
discutir y que todos participen, no es cierto?



=> muy cierto... siempre y cuando NO fuera posible reproducir el arreglo
sugerido (y algun interesado lo solicitara, no ?)

Quiero hacer émfasis en algo, inicialmente haces este comentario
2) pero... "trabaja" los argumentos de forma inversa (descendente):
A = ((((((((imp8 * (1 + PORC8)) * (1 + PORC7)) .
B = (((((((imp7 * (1 + PORC7)) * (1 + PORC6)) .
y ahora haces este
- uno en ascendente: [A1] "imp1"... [A8] "imp8*
- y otro descendente: [D1] "imp8"... [D8] "imp1"


el primero se refiere a iniciar los índices de los arreglos en 1 ó 0, lo
cual es irrelevante porque las operaciones son las mismas
en el segundo caso inviertes los imp's pero no las celdas [A1] vs [D1]



=> esta "inversion" es en relacion directa con los puntos 4 y 5 de mi
mensaje anterior (cual pones primero: [A1]=imp1 o [A1]=imp8 ?)
(los cuales no creo que sea "irrelevante" si los dejas "fuera de la
jugada" y -al parecer- aun no haces esas pruebas ???)

si miras mi codigo, invertí los dos rangos, no uno solo, de hecho ese
ejemplo no lo entiendo
parece no representar el algoritmo original, tal vez eso y una posible
confución con los paréntesis anidados
que son innecesarios, sea lo que no permita tener un acuerdo entre ambos.



=> es cierto que los parentesis (en exceso) son innecesarios, de hecho,
desde la primer prueba/correccion/... que hice -> los elimine
pero (creo que) lo que no "permite" llegar a un punto de concordia es
que (aun) no haces la prueba con los arreglos sugeridos (?)

Lo que llama la atención es que usas los ejemplos que señalé
anteriormente, para referirte a una misma condición
a pesar de que evidentemente son distintos



=> me espero para que (si tienes tiempo) hagas pruebas con los dos
arreglos "sugeridos"

saludos,
hector.

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