Problemas con formula "SI" en excel
Moderador: Moderadores
Problemas con formula "SI" en excel
Hola a todos, de nuevo recurro a vosotros para que me ayudeis, voy directo:
Supongamos que en la celda A4 hay la siguiente formula
=SI(A1=2003;SI(A2="H";25;SI(A1=2003;SI(A2="J";26)))), y así sucesivamente con todos los años a partir del 2003.
La formula está correcta y no hay ningun problema, pero mi problema es que necesito anidar la función "SI" ,en esa misma celda, varias veces, pero solo me deja anidarla 7 veces .
Me podeis ayudar a insertar una formula que me sirva para solucionar mi problema. otras veces lo habeis hecho y estoy seguro que en esta tambien me ayudareis.
Gracias
Supongamos que en la celda A4 hay la siguiente formula
=SI(A1=2003;SI(A2="H";25;SI(A1=2003;SI(A2="J";26)))), y así sucesivamente con todos los años a partir del 2003.
La formula está correcta y no hay ningun problema, pero mi problema es que necesito anidar la función "SI" ,en esa misma celda, varias veces, pero solo me deja anidarla 7 veces .
Me podeis ayudar a insertar una formula que me sirva para solucionar mi problema. otras veces lo habeis hecho y estoy seguro que en esta tambien me ayudareis.
Gracias
no se si te acepte un limite de 7 si anidados o mas porque al parecer a mi si me acepto al menos 8 que hice de prueba. En lo que me he fijado en tu formula es que te puedes ahorrar algunos SI anidados mediante un Y (And) de la siguiente manera (ejemplo):
=SI(Y(B4=1,D4=2),"si","no")
En tu caso quedaria mas o menos asi:
=SI(Y(A1=2003,A2="H"),25,SI(Y(A1=2003,A2="J"),26)),
kisas hasta pueda mejorarse la k te he puesto
=SI(Y(B4=1,D4=2),"si","no")
En tu caso quedaria mas o menos asi:
=SI(Y(A1=2003,A2="H"),25,SI(Y(A1=2003,A2="J"),26)),
kisas hasta pueda mejorarse la k te he puesto

Gracias, lo intento y luego te explico, no estoy en casa y tengo el archivo en ella. GraciasEPICA escribió:no se si te acepte un limite de 7 si anidados o mas porque al parecer a mi si me acepto al menos 8 que hice de prueba. En lo que me he fijado en tu formula es que te puedes ahorrar algunos SI anidados mediante un Y (And) de la siguiente manera (ejemplo):
=SI(Y(B4=1,D4=2),"si","no")
En tu caso quedaria mas o menos asi:
=SI(Y(A1=2003,A2="H"),25,SI(Y(A1=2003,A2="J"),26)),
kisas hasta pueda mejorarse la k te he puesto
La formula del ejemplo en mi mensaje era solo un ejemplo.Voy a intentar explicarlo: Tengo en una hoja la nomina de mi salario y en la misma segun el grupo laboral la de mi mujer, en otra hoja del mismo libro tengo una tabla con los salarios segun año, dese 2003 hasta 2007.
Por lo tanto, lo que yo pretendo es lo siguiente:
Si A1, es el año, A2 es el grupo laboral, y A3 es el salario segun año y segun grupo
Por esos la formula es la siguiente:
(A4)=si(A1=2003;si(A2=2;Hoja1!B5;si A1=2003;si(A2=3;Hoja1!B6, y asi sucesivamente hasta 2007.
A4, es la celda de destino final, así que segun el grupo salarial al salario sera distinto. Creo haberme explicado, si la funcion Si, no es la idonea, podiais explicarme como hacerlo con la funcion BuscarV,
. Gracias
Por lo tanto, lo que yo pretendo es lo siguiente:
Si A1, es el año, A2 es el grupo laboral, y A3 es el salario segun año y segun grupo
Por esos la formula es la siguiente:
(A4)=si(A1=2003;si(A2=2;Hoja1!B5;si A1=2003;si(A2=3;Hoja1!B6, y asi sucesivamente hasta 2007.
A4, es la celda de destino final, así que segun el grupo salarial al salario sera distinto. Creo haberme explicado, si la funcion Si, no es la idonea, podiais explicarme como hacerlo con la funcion BuscarV,
. Gracias
sw
Estoy en lo mismo puedes ahorrarte la mitad de SI mediante la funcion Y.
No se que tantos SI sean anidados pero puedes usar tambien la opcion 'Suma CONDICIONAL' (con asistente) del menu Herramientas y sino esta ahi tienes que agregarlo de la opcion llamada Complementos o Agregados del mismo menu Herramientas.
Si se te complica puedes facilitarnos una captura de imagen de tu Archivo para pillar como esta el asunto.
No se que tantos SI sean anidados pero puedes usar tambien la opcion 'Suma CONDICIONAL' (con asistente) del menu Herramientas y sino esta ahi tienes que agregarlo de la opcion llamada Complementos o Agregados del mismo menu Herramientas.
Si se te complica puedes facilitarnos una captura de imagen de tu Archivo para pillar como esta el asunto.

Re: sw
He seguido tus consejos, pero el problema sigue siendo mas de 7 SI anidados, ten encuenta que con tu ejemplo de formula, son 2 por año, 2003, 2, 2004,2 2005,2 2006,2, 2007,2, un total de 10 SI, de todas formas si puedes orientarme de como hacerlo con la funcion de suma condicional, te lo agradezco, esta es la formula en cuestion:EPICA escribió:Estoy en lo mismo puedes ahorrarte la mitad de SI mediante la funcion Y.
No se que tantos SI sean anidados pero puedes usar tambien la opcion 'Suma CONDICIONAL' (con asistente) del menu Herramientas y sino esta ahi tienes que agregarlo de la opcion llamada Complementos o Agregados del mismo menu Herramientas.
Si se te complica puedes facilitarnos una captura de imagen de tu Archivo para pillar como esta el asunto.
=SI(Y(F1=2003;C5=4);Hoja1!B5;SI(Y(F1=2003;C5=5);Hoja1!B6;SI(Y(F1=2004;C5=4);Hoja1!B13;SI(Y(F1=2004;C5=4);Hoja1!B14;SI(Y(F1=2005;C5=4)
;Hoja1!B20;SI(Y(F1=2005;C5=5);Hoja1!B21;SI(F1=2006;SI(C5=4;Hoja1!B27;)))))))), a partir de aqui si coloco otro SI, me da error.
Venga, gracias por todo.
'cuando algo no se deja entonces usaremos la fuerza bruta jeje osea VB in Excell
'para eso Presiona Ctrl+F11 o bien menu Herramientas-Macros-Editor de visual Basic
'Selecciona "Worksheet" y "SelectionChange" como en la imagen e introduce el codigo de la imagen, (faltan años que puedes agregar de la misma forma que como va el codigo)
'Una vez mas menciono que el codigo puede ser mejorado
'NOTA: Para que funcione debes habilitar macros (Pregunta al abrir archivo) y sino te sale es cuestion de cambiar la seguridad en Herramientas-Macro-Seguridad-"Medio"
'No pude ver otra solucion mas que esa a tu problema ojala y te sirva

'para eso Presiona Ctrl+F11 o bien menu Herramientas-Macros-Editor de visual Basic
'Selecciona "Worksheet" y "SelectionChange" como en la imagen e introduce el codigo de la imagen, (faltan años que puedes agregar de la misma forma que como va el codigo)
'Una vez mas menciono que el codigo puede ser mejorado
'NOTA: Para que funcione debes habilitar macros (Pregunta al abrir archivo) y sino te sale es cuestion de cambiar la seguridad en Herramientas-Macro-Seguridad-"Medio"
'No pude ver otra solucion mas que esa a tu problema ojala y te sirva


Hola, he seguido tus consejos y formula y lo he hecho tal cual me indicas y ya está insertado en la hoja de calculo, pero cuando inserto el año en la celda en cuestion, me traslada a VB y me sale una ventana con lo siguiente:EPICA escribió:'cuando algo no se deja entonces usaremos la fuerza bruta jeje osea VB in Excell
'para eso Presiona Ctrl+F11 o bien menu Herramientas-Macros-Editor de visual Basic
'Selecciona "Worksheet" y "SelectionChange" como en la imagen e introduce el codigo de la imagen, (faltan años que puedes agregar de la misma forma que como va el codigo)
'Una vez mas menciono que el codigo puede ser mejorado
'NOTA: Para que funcione debes habilitar macros (Pregunta al abrir archivo) y sino te sale es cuestion de cambiar la seguridad en Herramientas-Macro-Seguridad-"Medio"
'No pude ver otra solucion mas que esa a tu problema ojala y te sirva
ERROR DE COMPILACION:
ELSE SIN IF. ACEPTAR .CANCELAR
Seguramente, me he he equivocado en algun dato, te mando lo insertado para que compruebes el fallo. Gracias y perdona por la lata que te estoy dando
Private Sub CommandButton1_Click()
DatosAntonio.Activate
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("F1").Value = "2003" And Range("C5").Value = "4" Then Range("A1").Value = Worksheets("Hoja1").Cells(5, 2).Value 'hoja1 B5
ElseIf Range("F1").Value = "2003" And Range("C5").Value = "5" Then Range("A1").Value -Worksheets("Hoja1").Cells(6, 2).Value 'hoja D6
ElseIf Range("F1").Value = "2004" And Range("C5").Value = "4" Then Range("A1").Value -Worksheets("Hoja1").Cells(13, 2).Value 'hoja B13
ElseIf Range("F1").Value = "2004" And Range("C5").Value = "5" Then Range("A1").Value -Worksheets("Hoja1").Cells(14, 2).Value 'hoja B14
ElseIf Range("F1").Value = "2005" And Range("C5").Value = "4" Then Range("A1").Value -Worksheets("Hoja1").Cells(15, 2).Value 'hoja B20
ElseIf Range("F1").Value = "2005" And Range("C5").Value = "5" Then Range("A1").Value -Worksheets("Hoja1").Cells(16, 2).Value 'hoja B21
ElseIf Range("F1").Value = "2006" And Range("C5").Value = "4" Then Range("A1").Value -Worksheets("Hoja1").Cells(17, 2).Value 'hoja B27
ElseIf Range("F1").Value = "2006" And Range("C5").Value = "5" Then Range("A1").Value -Worksheets("Hoja1").Cells(18, 2).Value 'hoja B28
ElseIf Range("F1").Value = "2007" And Range("C5").Value = "4" Then Range("A1").Value -Worksheets("Hoja1").Cells(19, 2).Value 'hoja B34
ElseIf Range("F1").Value = "2007" And Range("C5").Value = "5" Then Range("A1").Value -Worksheets("Hoja1").Cells(20, 2).Value 'hoja B3I
ElseIf Range("F1").Value = "" Or Range("C5").Value = "" Then Range("A1").Value = "Falta dato"
End If
End Sub
a simple vista parece k te saltaste el 'then' osea mas o menos deberia kedar asi:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("F1").Value = "2003" And Range("C5").Value = "4" Then
Range("A1").Value = Worksheets("Hoja1").Cells(5, 2).Value 'hoja1 B5
ElseIf Range("F1").Value = "2003" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(6, 2).Value 'hoja D6
ElseIf Range("F1").Value = "2004" And Range("C5").Value = "4" Then
Range("A1").Value -Worksheets("Hoja1").Cells(13, 2).Value 'hoja B13
ElseIf Range("F1").Value = "2004" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(14, 2).Value 'hoja B14
ElseIf Range("F1").Value = "2005" And Range("C5").Value = "4" Then
Range("A1").Value -Worksheets("Hoja1").Cells(15, 2).Value 'hoja B20
ElseIf Range("F1").Value = "2005" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(16, 2).Value 'hoja B21
ElseIf Range("F1").Value = "2006" And Range("C5").Value = "4" Then
Range("A1").Value -Worksheets("Hoja1").Cells(17, 2).Value 'hoja B27
ElseIf Range("F1").Value = "2006" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(18, 2).Value 'hoja B28
ElseIf Range("F1").Value = "2007" And Range("C5").Value = "4" Then
Range("A1").Value -Worksheets("Hoja1").Cells(19, 2).Value 'hoja B34
ElseIf Range("F1").Value = "2007" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(20, 2).Value 'hoja B3I
ElseIf Range("F1").Value = "" Or Range("C5").Value = "" Then
Range("A1").Value = "Falta dato"
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("F1").Value = "2003" And Range("C5").Value = "4" Then
Range("A1").Value = Worksheets("Hoja1").Cells(5, 2).Value 'hoja1 B5
ElseIf Range("F1").Value = "2003" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(6, 2).Value 'hoja D6
ElseIf Range("F1").Value = "2004" And Range("C5").Value = "4" Then
Range("A1").Value -Worksheets("Hoja1").Cells(13, 2).Value 'hoja B13
ElseIf Range("F1").Value = "2004" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(14, 2).Value 'hoja B14
ElseIf Range("F1").Value = "2005" And Range("C5").Value = "4" Then
Range("A1").Value -Worksheets("Hoja1").Cells(15, 2).Value 'hoja B20
ElseIf Range("F1").Value = "2005" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(16, 2).Value 'hoja B21
ElseIf Range("F1").Value = "2006" And Range("C5").Value = "4" Then
Range("A1").Value -Worksheets("Hoja1").Cells(17, 2).Value 'hoja B27
ElseIf Range("F1").Value = "2006" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(18, 2).Value 'hoja B28
ElseIf Range("F1").Value = "2007" And Range("C5").Value = "4" Then
Range("A1").Value -Worksheets("Hoja1").Cells(19, 2).Value 'hoja B34
ElseIf Range("F1").Value = "2007" And Range("C5").Value = "5" Then
Range("A1").Value -Worksheets("Hoja1").Cells(20, 2).Value 'hoja B3I
ElseIf Range("F1").Value = "" Or Range("C5").Value = "" Then
Range("A1").Value = "Falta dato"
End If
End Sub
