Jump to content
Sign in to follow this  
elbucle

[CERRADO]Formula muy larga, anidamientos funcion si

Recommended Posts

Muy buenas a todos:

En relación con este tema y el Nº máximo de anidaciones de la función SI, que creo que en excel 2003 son 7, estoy tratando de aplicar lo que se ha respondido en este tema y me da una respuesta que es imposible.

Me explicaré:

Trato de crear una fórmula que me diga cuantos días de vacaciones le corresponden a un trabajador dependiendo de los años que lleve en una empresa:

Si son menos de 15 años 22 días

15 años 23 días

20 años 24 días

25 años 25 días

30 o más 26 días

Además este derecho se hace efectivo a partir del año natural siguiente al cumplimiento de los años señalados

Las fórmulas para cada caso las tengo resueltas, el problema me surge al unirlas todas en una, y no entiendo porqué puesto que son 5 anidaciones; he intentado usar el carácter "&" a partir de la 4ª anidación, que es donde me empieza a dar error, pero me devuelve una cifra imposible.

Adjunto un archivo en el que en 5 celdas están metidos los cinco casos dando correctamente la fórmula. Despues en la celda c14 he metido lo que sería la fórmula entera, para que el que me pueda ayudar no tenga que reescribirla; como vereis le he quitado el signo "=" para que me deje mantenerla.

Gracias de antemano si alguien me puede echar una mano

Nº dias vacaciones.zip

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Pues si el problema no es de la anidación de la función si, entonces estoy más perdido y no se porque no da correctamente.

Antes se me olvidó explicar que para conseguir que se cumpla la condicion de que el derecho empieza al año natural siguiente al cumplimiento de los años lo que he hecho es

si(y(hoy()>=(fecha(año((fecha((año($j$7)+15);mes($j$7);dia($j$7))));12;32));(hoy()<(fecha(año((fecha((año($j$7)+20);mes($j$7);dia($j$7))));12;32))));23

es decir comparar hoy con el 1er día del año siguiente al dia que se cumplen los 15 años

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Si lo que pasa es que en el laburo no puedo ver los adjuntos por un tema de seguridad informatica, pero del mail si

Ya lo veo y te comento

Nicolas

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Hola elbucle

Espero t encuentres bien, mira el problema en si no son los Si que estas utilizando, el problema es el número d caracateres, como bien dices la fórmula que calcula el día d hoy con el primer día del año siguiente, es muy larga y no t permite introducir todo eso; si creas una fórmula que calcule eso y le pasa sólo la fórmula, es probable que si t funcione como quieres.

Salu2. :D

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Antes de nada muchas gracias por tu respuesta y el trabajo realizado.

La verdad es que no me expliqué correctamente o de la lectura del archivo puede que dé a entender otra cosa.

El tema es que es en un formulario bastante complejo en el que sólo tengo una celda para que me dé ese dato, el nº de dias de vacaciones que corresponde a un trabajador.

Yo ya tengo hechas todas las formulas y funcionan siempre pero de forma individual, son las que estan en las celdas c8 a d12 del archivo colgado.

En la celda d14 es donde quiero meter una formula que junte las cinco anteriores, no sé porqué me da un error. En el archivo que he subido en d14 ya está metida toda la fórmula unida pero sin el signo igual al principio para que deje mantenerla y no de error. Si pones en ella el signo igual al principio podrías ver dónde está el error.

En la respuesta que me has dado, que en cualquier caso agradezco infinitamente, no tienes en cuenta eso que me exigen de que el derecho nace al año natural siguiente de cumplir los años en la empresa, por eso es tan larga y comparo hoy con el primer dia del año siguiente

(fecha(año((fecha((año($e$6)+30);mes($e$6);dia($e$6))));12;32)),

en este caso es si lleva 30 años en la empresa, 12 meses despues y 32 dias para que de el dia 1 del año siguiente

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Puede que tengas razón, pero en otras ocasiones he trabajado con formulas más largas y sobre todo de más caracteres y me han funcionado

saludos y gracias

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Hola Elbucle.

Tantos dias de vacaciones suenan a func... ya que no nos suben el sueldo. Bueno. mira a ver si así funciona, es retorico:), porque a mi me ha funcionado

=SI(HOY()<=FECHA((AÑO($E$6)+15);MES($E$6);DIA($E$6));22;SI(Y(HOY()>=FECHA((AÑO($E$6)+15);MES($E$6);DIA($E$6));HOY()<FECHA((AÑO($E$6)+20);MES($E$6);DIA($E$6)));23;SI(Y(HOY()>=FECHA((AÑO($E$6)+20);MES($E$6);DIA($E$6));HOY()<FECHA((AÑO($E$6)+25);MES($E$6);DIA($E$6)));24;SI(Y(HOY()>=FECHA((AÑO($E$6)+25);MES($E$6);DIA($E$6));HOY()<FECHA((AÑO($E$6)+30);MES($E$6);DIA($E$6)));25;26))))

Según las especificaciones de excel, que puedes encontrar aquí el número máximo de niveles anidados son 7 y la longitud máxima de caracteres en una fórmula (que era al principio en donde yo pensaba que estaba el error:mad:) es de 1024

Saludos

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Fijate si la modificacion que le hice te da resultado:

=+SI(HOY()<FECHA((AÑO($E$6)+15);MES($E$6);DIA($E$6));22;SI(Y(HOY()>=(FECHA(AÑO((FECHA((AÑO($E$6)+20);MES($E$6);DIA($E$6))));12;32));(HOY()<(FECHA(AÑO((FECHA((AÑO($E$6)+25);MES($E$6);DIA($E$6))));12;32))));24;SI(Y(HOY()>=(FECHA(AÑO((FECHA((AÑO($E$6)+25);MES($E$6);DIA($E$6))));12;32));(HOY()<(FECHA(AÑO((FECHA((AÑO($E$6)+30);MES($E$6);DIA($E$6))));12;32))));25;SI(HOY()>=(FECHA(AÑO((FECHA((AÑO($E$6)+30);MES($E$6);DIA($E$6))));12;32));26;"NO"))))

En realidad lo unico que hice es Reemplazar los NO del final de cada formula individual por la formula siguiente, dime si es lo que necesitabas

Saludos

Nicolas

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

buenas de nuevo elbucle si no importa la fecha de alta sino que el año otra forma de reducir la formula puede ser esta

=SI(AÑO(HOY())<(AÑO($E$6)+15);22;SI(Y(AÑO(HOY())>=(AÑO($E$6)+15);(AÑO(HOY())<(AÑO($E$6)+20)));23;SI(Y(AÑO(HOY())>=(AÑO($E$6)+20);(AÑO(HOY())<(AÑO($E$6)+25)));24;SI(Y(AÑO(HOY())>=(AÑO($E$6)+25);(AÑO(HOY())<(AÑO($E$6)+30)));25;SI(Y(AÑO(HOY())>=(AÑO($E$6)+30);(AÑO(HOY())<(AÑO($E$6)+32)));26;"NO")))))

un saludo

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

A ver si te entendí. Espero te sirva. Te puse la fórmula en la celda azul. Más resumida... ¿?

=SI(SIFECHA($E$6;HOY();"y")<15;22;SI(Y(SIFECHA($E$6;HOY();"y")>=15;SIFECHA($E$6;HOY();"y")<20);23;SI(Y(SIFECHA($E$6;HOY();"y")>=20;SIFECHA($E$6;HOY();"y")<25);24;SI(Y(SIFECHA($E$6;HOY();"y")>=25;SIFECHA($E$6;HOY();"y")<30);25;26))))[/CODE]

El "NO" no te sirve para nada ya que si no se cumple una condición, siempre se cumple otra. Eso sólo te sirve si lo haces de forma individual como lo tienes en las celdas verdes.

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Desde luego a quien le cuente como funciona este foro no se lo cree, es increible la de gente que hay dispuesta a ayudar;

muchas gracias nicotuc por tu respuesta y tu trabajo, pero has suprimido un par de casos que debería contener la formula y así no da error. Sobre la que has puesto tú he añadido los casos que faltaban y sigue dando error.

En concreto te falta el caso que sea >= 15 y < 20 en el que corresponden 23 dias

en cualquier caso muchas gracias, voy a responder y a agradecer al resto de foreros que me han contestado

saludos

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Respondo ahora y agradezco el trabajo a Luka79,

Has suprimido lo de

(FECHA(AÑO((FECHA((AÑO($E$6)+15);MES($E$6);DIA($E$6))));12;32))

con ello lo que pretendo es que se cumpla la condición de que sólo aumente los días cuando sea el año natural siguiente a la fecha de cumplirse los años requeridos en la empresa

No sé si así va a funcionar en todos los casos, tengo que hacer pruebas con distintas fechas

Gracias

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Hola julibaga, gracias por tu respuesta:

Al igual que Luka79 has suprimido lo que yo puse para conseguir que sólo sume un día más cuando sea el año natural siguiente al cumplimiento de los años en la empresa, de ahí eso de

(FECHA(AÑO((FECHA((AÑO($E$6)+25);MES($E$6);DIA($E$6))));12;32))

con ello pretendo que cuando lleve 25 años y sea el primer día del año siguiente al que se cumplen esos 25 años (12 meses y 32 días) entonces sume un día más

Muchas gracias

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Hola logroastur, gracias por tu respuesta

Sí que importa el día, pues el derecho a tener un día más debe empezar un día concreto, no durante todo un año.

En cualquier caso muy agradecido, desde luego es increible la cantidad de gente buena que hay por aquí.

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

logroastur, estoy repasando la primera respuesta que subiste, en ella, dices

SI(HOY()-$J$7<=15*365, despues <=19*365, despues <=25*365, despues <=30*365 y finalmente <=45*365

¿Podrías explicarme porqué 19 y 45?, es un error o es por otra cosa?

Lo que debería ser es

Lo que me piden es

Si son menos de 15 años 22 días

15 años 23 días

20 años 24 días

25 años 25 días

30 o más 26 días

Y todo ello al año natural siguiente de cumplirse esos días.

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Muchas gracias Toldeman

Tal como lo has puesto creo que funciona perfectamente.

Si no es mucho pedir, podrías explicarme porqué pones en la columna H

=365*15-3

=365*15

=365*20

=365*25

=365*30

no logro entenderlo

Gracias otra vez

Saludos

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Hola.

En la columna H están los años multiplicado por los días comprendidos en estos.

El que he puesto con -3 ha sido para diferenciarlo del que son >= 15 años, aunque esto lo puedes modificar como tu quieras.

Estos valores que se obtienen de la multiplicación no son 100% exactos, ya que habría que contar los años que son bisiestos, pero me imagino que el margen de error seria muy pequeño.

saludos.

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

buenas elbucle veras el tema es el siguiente

SI(HOY()-$J$7<=15*365, esto si es menor o igual a 15 años de antiguedad

despues <=19*365, esto si es menor o igual a 19 años de antiguedad

despues <=25*365, esto si es menor o igual a 25 años de antiguedad

despues <=30*365 esto si es menor o igual a 30 años de antiguedad

finalmente <=45*365 esto si es menor o igual a 45 años de antiguedad

la idea es que si la antiguedad es superior a 15 años y menor de 20 tendria "x"

si es mayor de 20 y menor de 25 tendria "y"

si es mayor de 25 y menor de 30 tendria "z"

y si es mayor de 30 y menor de 45 tendria "w"

lo de 45 es por que supongo que sera improbable que exista alguien con más de 45 años de antiguedad.

el que comience la efectividad de los días al siguiente año creo que se puede soluccionar si se pone un año mas en la comparativa es decir

que sería

si es menor o igual a 16 años

si es menor o igual a 21 años

si es menor o igual a 26 años

si es menor o igual a 31 años

espero que te sirva

un saludo

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

Logroastur muchas gracias por tu respuesta.

El problema es que creo que de la forma que propones no se cumple la condición de que el derecho se haga efectivo al año natural siguiente de cumplir los años de antigüedad; sumando siempre un año más como tú propones no sería correcto cuando alguien cumpla los años en el mes de diciembre, porque en ese caso se le debería sumar el día más al que tiene derecho el día 1 del año siguiente, es decir, transcurridos menos de un mes, y de la forma que tú has propuesto, y que no puedo dejar de agradecer, tendría derecho en el mes de diciembre del año siguiente.

Según alguien ha comentado en este tema hay un nº máximo de caracteres por celda, creo que mil y pico, en este caso en la formula que yo inserté en la celda D14 del archivo que subí, si no me he equivocado al contar los caracteres con la funcion "LARGO", hay 596 caracteres, así que no acabo de entender por que no la admite como yo en principio la escribí.

En cualquiera de los casos, y despues de agradecer a todos las respuestas y el interés mostrado, creo que lo puedo solucionar de otra forma sencilla, aunque usando tres celdas en lugar de una, y consiste en dividir la formula en dos celdas.

Primera celda, (B263) desde <15 a <25

=SI(HOY()<FECHA((AÑO($J$7)+15);MES($J$7);DIA($J$7));22;SI(Y(HOY()>=(FECHA(AÑO((FECHA((AÑO($J$7)+15);MES($J$7);DIA($J$7))));12;32));(HOY()<(FECHA(AÑO((FECHA((AÑO($J$7)+20);MES($J$7);DIA($J$7))));12;32))));23;SI(Y(HOY()>=(FECHA(AÑO((FECHA((AÑO($J$7)+20);MES($J$7);DIA($J$7))));12;32));(HOY()<(FECHA(AÑO((FECHA((AÑO($J$7)+25);MES($J$7);DIA($J$7))));12;32))));24;"no")))

Segunda celda, (B264)desde >=25 hasta >30

=SI(Y(HOY()>=(FECHA(AÑO((FECHA((AÑO($J$7)+25);MES($J$7);DIA($J$7))));12;32));(HOY()<(FECHA(AÑO((FECHA((AÑO($J$7)+30);MES($J$7);DIA($J$7))));12;32))));25;SI(HOY()>=(FECHA(AÑO((FECHA((AÑO($J$7)+30);MES($J$7);DIA($J$7))));12;32));26;"no"))[/color]

Tercera celda, la que contiene la fórmula definitiva

=SI((HOY()<(FECHA(AÑO((FECHA((AÑO($J$7)+25);MES($J$7);DIA($J$7))));12;32)));B263;SI(HOY()>=(FECHA(AÑO((FECHA((AÑO($J$7)+25);MES($J$7);DIA($J$7))));12;32));B264;"NO"))

En J7 está la fecha de entrada en la empresa.

Muchas gracias a todos, creo que el tema me queda resuelto

Share this post


Link to post
Share on other sites

Respuesta: Formula muy larga, anidamientos funcion si

En éste te cuento los días de más correspondientes a los años bisiestos y espero que te sirva al 100% de lo que quieres. Claro que debe estar en una celda aparte para que la anidación no sea tan larga. Chécalo y comenta.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...

Important Information

Privacy Policy