Si anidado

10/03/2006 - 22:32 por Mayor Rapaz | Informe spam
Me he hecho un lio con la formula SI anidada para obtener lo siguiente.

Ingresando en una celda el monto tengo que calcular los siguiewntes
descuento:

La suma
hasta $ 1000 no descuenta nada
de 1001 a 2000 el 10 %
2001 a 3000 el 15 %
3001 a 4000 el 20 %
4001 a 5000 el 25 %
5001 a 6000 el 30 %

Los descuentos son por franjas o sea que si la suma es de 4000 por ejemplo
se aplica el 10% de 1001 a 2000, de 2001 a 3000 el 15 %,de 3001 a 4000 el
20%.
El descuento es la suma de las franjas.
Podría hacerlo de muchas maneras pero lo necesito en una fórmula sola.
Gracias desde ya

Preguntas similare

Leer las respuestas

#6 Mayor Rapaz
19/03/2006 - 00:50 | Informe spam
La formula me da un error ;el cual no puedo detectar.

El error lo da en .1000\0\0,...
Gracias



"KL" escribio en el mensaje
news:%
Hola chicos,

Otra alternativa podria ser la siguiente:

Paso 1: Creamos una tabla como la siguiente y le ponemos un nombre, digamos
Tbl

0 0 0%
1000 0 10%
2000 100 15%
3000 250 20%
4000 550 25%
5000 1150 30%

Paso 2: Introducimos la siguiente formula:

=(A1-BUSCARV(A1;Tbl;1))*BUSCARV(A1;Tbl;3)+BUSCARV(A1;Tbl;2)

Creo que las ventajas serian:
1) mas facil de modificar
2) menos operaciones (mayor rapidez)
3) mas facil de entender
4) mas corta la formula

Claro que tambien se podria hacer lo siguiente sin necesidad de crear la
tabla fisicamente:

=(A1-BUSCARV(A1;{0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\550\0,25;5000\1150\0,3};1))*BUSCARV(A1;{0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\550\0,25;5000\1150\0,3};3)+BUSCARV(A1;{0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\550\0,25;5000\1150\0,3};2)

Saludos,
KL



"Héctor Miguel" wrote in message
news:uH%
hola ? [fe de erratas] :-(

la nueva propuesta tiene un 'fallo' en la segunda linea de la formula
:-( [perdon... se me chispotio hacer mas pruebas] :D

-> cambia la segunda linea/parte de la formula...
de: -> +1000*entero(a1/1000-6)*30%
a: -> +(a1>6000)*1000*entero(a1/1000-6)*30%

o... [por si las dudas]... la nueva formulacion completa seria +/- como
sigue [en una sola linea]...
=sumaproducto(1000*(a1>=({2\3\4\5\6}*1000))*{10\15\20\25\30}%)
+(a1>6000)*1000*entero(a1/1000-6)*30%
+residuo(a1,1000)*indice({30\25\20\15\10}%,coincidir(a1/1000,{100\5\4\3\2},-1))

saludos,
hector.


Respuesta Responder a este mensaje
#7 KL
19/03/2006 - 01:04 | Informe spam
- prueba sustituir los puntos y comas con comas
o
- prueba sustituir las comas con puntos
o
- ambas cosas anteriores

Saludos,
KL


"Mayor Rapaz" wrote in message news:
La formula me da un error ;el cual no puedo detectar.

El error lo da en .1000\0\0,...
Gracias



"KL" escribio en el mensaje
news:%
Hola chicos,

Otra alternativa podria ser la siguiente:

Paso 1: Creamos una tabla como la siguiente y le ponemos un nombre, digamos
Tbl

0 0 0%
1000 0 10%
2000 100 15%
3000 250 20%
4000 550 25%
5000 1150 30%

Paso 2: Introducimos la siguiente formula:

=(A1-BUSCARV(A1;Tbl;1))*BUSCARV(A1;Tbl;3)+BUSCARV(A1;Tbl;2)

Creo que las ventajas serian:
1) mas facil de modificar
2) menos operaciones (mayor rapidez)
3) mas facil de entender
4) mas corta la formula

Claro que tambien se podria hacer lo siguiente sin necesidad de crear la
tabla fisicamente:

=(A1-BUSCARV(A1;{0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\550\0,25;5000\1150\0,3};1))*BUSCARV(A1;{0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\550\0,25;5000\1150\0,3};3)+BUSCARV(A1;{0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\550\0,25;5000\1150\0,3};2)

Saludos,
KL



"Héctor Miguel" wrote in message
news:uH%
hola ? [fe de erratas] :-(

la nueva propuesta tiene un 'fallo' en la segunda linea de la formula
:-( [perdon... se me chispotio hacer mas pruebas] :D

-> cambia la segunda linea/parte de la formula...
de: -> +1000*entero(a1/1000-6)*30%
a: -> +(a1>6000)*1000*entero(a1/1000-6)*30%

o... [por si las dudas]... la nueva formulacion completa seria +/- como
sigue [en una sola linea]...
=sumaproducto(1000*(a1>=({2\3\4\5\6}*1000))*{10\15\20\25\30}%)
+(a1>6000)*1000*entero(a1/1000-6)*30%
+residuo(a1,1000)*indice({30\25\20\15\10}%,coincidir(a1/1000,{100\5\4\3\2},-1))

saludos,
hector.






Respuesta Responder a este mensaje
#8 Hector Miguel
19/03/2006 - 06:04 | Informe spam
hola, chicos !

KL escribio en el mensaje ...
Otra alternativa podria ser la siguiente:
Paso 1: Creamos una tabla como la siguiente y le ponemos un nombre, digamos Tbl
0 0 0%
1000 0 10%
2000 100 15%
3000 250 20%
4000 550 25%
5000 1150 30%
Paso 2: Introducimos la siguiente formula:
=(A1-BUSCARV(A1;Tbl;1))*BUSCARV(A1;Tbl;3)+BUSCARV(A1;Tbl;2)
Creo que las ventajas serian:
1) mas facil de modificar
2) menos operaciones (mayor rapidez)
3) mas facil de entender
4) mas corta la formula
Claro que tambien se podria hacer lo siguiente sin necesidad de crear la tabla fisicamente:



=(A1-BUSCARV(A1;{0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\550\0,25;5000\1150\0,3};1))*BUSCARV(A1;{0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\550\0,25;5000\1150\0,3};3)+BUSCARV(A1;{0\0\0;1000\0\0,1;2000\100\
0,15;3000\250\0,2;4000\550\0,25;5000\1150\0,3};2)

1) la opcion de 'crear' una tabla [fisicamente] la habia dado por 'descartada' [el ingenuo de yo] por el comentario final de la consulta original...
-> '... Podria hacerlo de muchas maneras pero lo necesito en una formula sola...' :-(

2) [me prece que] hay un error en la segunda columna de la tabla propuesta que debiera ser la acumulacion de % hasta la fila anterior -?-
y habria que modificarla a la tabla siguiente:
0 0 0%
1000 0 10%
2000 100 15%
3000 250 20%
4000 450 25%
5000 700 30%

3) dado que [efectivamente] es mas facil 'modificar' una tabla, al momento de 'convertirla' a matrices constantes [creo que]...
no es necesario 'transcribir' la tabla completa [filas y columnas] a las constantes -> {...\...;...}
ademas de que los caracteres en matrices constantes 'aplicables' a filas/columnas dependeran de la configuracion regional del equipo
[al igual que los signos para separar decimales, miles, listas y argumentos] :D

4) considerando los comentario del punto 3 anterior [y asumiendo que OP usa una configuracion 'similar' a la mia] :))
prueba con alguna de las siguientes formulas [que en realidad son la misma]... :D
=buscarv(a1/1000,{0;0\2;1\3;2.5\4;4.5\5;7},2)*100+(a1-buscarv(a1,{0\1\2\3\4\5}*1000,1))*buscarv(a1/1000,{0;0\1;10\2;15\3;20\4;25\5;30},2)%
=buscarv(a1/1000,{0;0\2;100\3;250\4;450\5;700},2)+(a1-buscarv(a1,{0\1\2\3\4\5}*1000,1))*buscarv(a1/1000,{0;0\1;10\2;15\3;20\4;25\5;30},2)%
-> utiliza la msma 'base' que la propuesta anterior de KL [solo que he tratado de 'optimizarla'] ;)

5) la formula 'optimizada' contiene 137 caracteres [versus 268 por 'transcribir completa' la tabla 3 veces en las matrices constantes] ;)

saludos,
hector.

p.d. OJO con el tema de los caracteres 'separadores' segun la configuracion regional :))
Respuesta Responder a este mensaje
#9 KL
19/03/2006 - 12:27 | Informe spam
Hola chicos,

"Hector Miguel" wrote
1) la opcion de 'crear' una tabla [fisicamente] la habia dado por 'descartada' [el ingenuo de yo] por el comentario final de la consulta original...
-> '... Podria hacerlo de muchas maneras pero lo necesito en una formula sola...' :-(



Bueno, formula formula si que es una sola, pero tiene razon HM no me di cuenta del comentario. En todo caso, es mi opcion preferida.

2) [me prece que] hay un error en la segunda columna de la tabla propuesta que debiera ser la acumulacion de % hasta la fila anterior -?-
y habria que modificarla a la tabla siguiente:



Si, HM tiene razon, se me fastidiaron las formulas de la segunda columna al manipular la tabla :-(

3) dado que [efectivamente] es mas facil 'modificar' una tabla, al momento de 'convertirla' a matrices constantes [creo que]...
no es necesario 'transcribir' la tabla completa [filas y columnas] a las constantes -> {...\...;...}
ademas de que los caracteres en matrices constantes 'aplicables' a filas/columnas dependeran de la configuracion regional del equipo
[al igual que los signos para separar decimales, miles, listas y argumentos] :D



Bueno, esto me parece un arma de doble filo, ya que los parametros se ponen aun mas dificiles de modificar [mas propensos a errores] al haber varias matrices distintas en una sola formula. Por otro lado siendo las tablas unas matrices fijas, el desempeno no es afectado, por lo que para mi el verdadero "trade-off" aqui es entre la longitud y la amigabilidad (si se puede habla de la amigabilidad de matrices bidimensionales en formulas, jejeje).

4) considerando los comentario del punto 3 anterior [y asumiendo que OP usa una configuracion 'similar' a la mia] :))
prueba con alguna de las siguientes formulas [que en realidad son la misma]... :D
5) la formula 'optimizada' contiene 137 caracteres [versus 268 por 'transcribir completa' la tabla 3 veces en las matrices constantes] ;)



Ya puestos a reducir la longitud [aunque estrictamente dicho se trataria mas de una formula :-)]...

Podriamos meter la tabla en un nombre definido:
menu Insertar>Nombre>Definir...
Tbl ={0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\450\0,25;5000\700\0,3}
Nota: usando los separadores correspondientes al sistema en cuestion (columnas y filas en matrices, decimales, argumentos, etc.)

y luego la formula de antes:

=(A1-BUSCARV(A1;Tbl;1))*BUSCARV(A1;Tbl;3)+BUSCARV(A1;Tbl;2)

Saludos,
KL
Respuesta Responder a este mensaje
#10 Hector Miguel
20/03/2006 - 08:33 | Informe spam
hola, KL !

... no me di cuenta del comentario. En todo caso, es mi opcion preferida.



=> y la mia tambien ;)

... puestos a reducir la longitud [aunque estrictamente dicho se trataria mas de una formula :-)]...
... meter la tabla en un nombre definido: menu Insertar>Nombre>Definir...
Tbl ={0\0\0;1000\0\0,1;2000\100\0,15;3000\250\0,2;4000\450\0,25;5000\700\0,3}
... luego la formula de antes:
=(A1-BUSCARV(A1;Tbl;1))*BUSCARV(A1;Tbl;3)+BUSCARV(A1;Tbl;2)



esta es [sin duda] la mejor alternativa para OP ;)

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida