Mostrar y ocultar filas de una hoja según el valor de una celda de otra hoja

Tengo un inconveniente con el formulario que estoy desarrollando, necesito que las filas de una hoja se oculten dependiendo de los valores de una celda que se encuentran en otra hoja según los siguientes criterios:

Si en la hoja llamada "Base"se encuentra una "X" en la siguientes celdas:

A22= "X" entonces en la hoja llamada "CL" se ocultan las filas 28:51

A23="X" entonces en la hoja llamada "CL" se ocultan las filas 52:97

A24="X" entonces en la hoja llamada "CL" se ocultan las filas 417:633

A25="X" entonces en la hoja llamada "CL" se ocultan las filas 286:416

A26="X" entonces en la hoja llamada "CL" se ocultan las filas 98:285

A27="X" entonces en la hoja llamada "CL" se ocultan las filas 634:808

He revisado diferentes temas pero no he encontrado esta solución ya que la mayoría se realiza en una misma hoja.

Les agradezco su ayuda, fuera bueno que se pueda realizar esto sin macros pero si no fuera así que me ayuden con el código ya que no se mucho de macros.

2 Respuestas

Respuesta
1

Con macro lo podría hacer así, da clic derecho en la hoja y se abre el editor de código ahí pega la macro

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("A22").Value <> "" Then
        Rows("28:51").EntireRow.Hidden = True
    Else
        Rows("28:51").EntireRow.Hidden = False
    End If
        If Range("A23").Value <> "" Then
        Rows("52:97").EntireRow.Hidden = True
    Else
        Rows("52:97").EntireRow.Hidden = False
    End If
        If Range("A24").Value <> "" Then
        Rows("417:633").EntireRow.Hidden = True
    Else
        Rows("417:633").EntireRow.Hidden = False
    End If
        If Range("A25").Value <> "" Then
        Rows("286:416").EntireRow.Hidden = True
    Else
        Rows("286:416").EntireRow.Hidden = False
    End If
        If Range("A26").Value <> "" Then
        Rows("98:285").EntireRow.Hidden = True
    Else
        Rows("98:285").EntireRow.Hidden = False
    End If
        If Range("A27").Value <> "" Then
        Rows("634:808").EntireRow.Hidden = True
    Else
        Rows("634:808").EntireRow.Hidden = False
    End If
End Sub

Gracias por la respuesta amigo, me puedes ayudar como coloco la macro, realice lo que me indicaste pero no lo pude hacer, perdón soy nuevo en esto..

Y disculpa con esa macro se ocultan las filas de la hoja "CL" dependiendo de el valor de la celda de la hoja "BASE"..?

Le mando el código actualizado y una guía de donde poner el código. Esta macro oculta las filas de la hoja "CL" dependiente del valor de la celda de la hoja "Base"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("A22").Value = "X" Or Range("A22").Value = "x" Then
    Set H = Sheets("CL")
        Worksheets("CL").Rows("28:51").EntireRow.Hidden = True
    Else
        Worksheets("CL").Rows("28:51").EntireRow.Hidden = False
    End If
    If Range("A23").Value = "X" Or Range("A23").Value = "x" Then
        Worksheets("CL").Rows("52:97").EntireRow.Hidden = True
    Else
        Worksheets("CL").Rows("52:97").EntireRow.Hidden = False
    End If
    If Range("A24").Value = "X" Or Range("A24").Value = "x" Then
        Worksheets("CL").Rows("417:633").EntireRow.Hidden = True
    Else
        Worksheets("CL").Rows("417:633").EntireRow.Hidden = False
    End If
    If Range("A25").Value = "X" Or Range("A25").Value = "x" Then
        Worksheets("CL").Rows("286:416").EntireRow.Hidden = True
    Else
        Worksheets("CL").Rows("286:416").EntireRow.Hidden = False
    End If
    If Range("A26").Value = "X" Or Range("A26").Value = "x" Then
        Worksheets("CL").Rows("98:285").EntireRow.Hidden = True
    Else
        Worksheets("CL").Rows("98:285").EntireRow.Hidden = False
    End If
    If Range("A27").Value = "X" Or Range("A27").Value = "x" Then
        Worksheets("CL").Rows("634:808").EntireRow.Hidden = True
    Else
        Worksheets("CL").Rows("634:808").EntireRow.Hidden = False
    End If
End Sub

Respuesta
2

Solamente es posible con macros.

En la hoja "Base", ¿en las celdas A22 a A27 tienes fórmulas?

¿Quieres qué se muestren o se oculten las filas en automático al cambiar el valor de las celdas A22 a A27?

Aquí te ayudo para que puedas instalar la macro, comenta sobre las preguntas que te estoy haciendo.

Gracias por la respuesta amigo te respondo en cada pregunta...

Solamente es posible con macros.

En la hoja "Base", ¿en las celdas A22 a A27 tienes fórmulas?

No hay formulas en estas celdas

¿Quieres qué se muestren o se oculten las filas en automático al cambiar el valor de las celdas A22 a A27?

Si efectivamente ese es objetivo si la celda contiene una "x", que las filas de la hoja "CL" se muestren caso contrario si esta la celda esta vacía, que las filas de la hoja "CL" se oculten.

Aquí te ayudo para que puedas instalar la macro, comenta sobre las preguntas que te estoy haciendo.

Si la celda contiene una "x", que las filas de la hoja "CL" se muestren caso contrario si esta la celda esta vacía, que las filas de la hoja "CL" se oculten.


Pon el siguiente código en los eventos de tu hoja "Base"

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.CountLarge > 1 Then Exit Sub
  If Not Intersect(Target, Range("A22:A27")) Is Nothing Then
    Select Case Target.Row
      Case 22: Sheets("CL").Rows("28:51").Hidden = Target.Value = ""
      Case 23: Sheets("CL").Rows("52:97").Hidden = Target.Value = ""
      Case 24: Sheets("CL").Rows("417:633").Hidden = Target.Value = ""
      Case 25: Sheets("CL").Rows("286:416").Hidden = Target.Value = ""
      Case 26: Sheets("CL").Rows("98:285").Hidden = Target.Value = ""
      Case 27: Sheets("CL").Rows("634:808").Hidden = Target.Value = ""
    End Select
  End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet("Base")
  4. En el panel del lado derecho copia la macro

Regresa a tu hoja de excel. Selecciona tu hoja "Base", escribe "X" en cualquiera de las celdas A22 a A27 o borra la "X". Revisa la hoja "Cl" para que veas el resultado.

Amigo me funciono perfecto... solo tengo un pequeño problema, la celda A27 si tiene una fórmula, la celda A27 se marca con una "x" si en cualquier de las celdas A24; A24 o A26 esta una "x", a lo que pongo esta fórmula ya no me sirve la macro

Pon aquí la fórmula.

¿Y qué quieres que suceda con el resultado de la fórmula?

dentro de la celda A27 esta esta formula:  IF(OR(A24="x";A25="x";A26="x");"x";" "), al poner esta formula en la hoja de calculo la macro que me ayudaste ya no me sirve.

el resultado seria el mismo, si en la celda A27 de la hoja "BASE" esta con una "x" (resultado de la formula que esta anteriormente) que las filas 634:808 de la hoja "CL" se muestren, caso contrario se oculten.

Gracias.

Funciona para las otras celdas. Para la A27 no funciona.

Y no me contestaste esto:

¿Y qué quieres que suceda con el resultado de la fórmula?

Funciona para las otras celdas. Para la A27 no funciona.

Efectivamente la macro sirve para las celdas A22 a A26, pero no para la celda A27 ya que aquí se encuentra la fórmula que te indique.

Y no me contestaste esto:

¿Y qué quieres que suceda con el resultado de la fórmula?

El resultado seria el mismo, si en la celda A27 de la hoja "BASE" esta con una "x" (resultado de la fórmula que esta anteriormente) que las filas 634:808 de la hoja "CL" se muestren, caso contrario se oculten.

Prueba lo siguiente.

Reemplaza el código anterior por este:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.CountLarge > 6 Then Exit Sub
  If Not Intersect(Target, Range("A22:A27")) Is Nothing Then
    Select Case Target.Row
      Case 22: Sheets("CL").Rows("28:51").Hidden = Target.Value = ""
      Case 23: Sheets("CL").Rows("52:97").Hidden = Target.Value = ""
      Case 24: Sheets("CL").Rows("417:633").Hidden = Target.Value = ""
      Case 25: Sheets("CL").Rows("286:416").Hidden = Target.Value = ""
      Case 26: Sheets("CL").Rows("98:285").Hidden = Target.Value = ""
    End Select
    Sheets("CL").Rows("634:808").Hidden = UCase(Range("A27").Value) = ""
  End If
End Sub

Disculpa, tuve que hacer unos ajustes. Utiliza el siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.CountLarge > 6 Then Exit Sub
  If Not Intersect(Target, Range("A22:A27")) Is Nothing Then
    Dim c As Range
    For Each c In Target
      Select Case c.Row
        Case 22: Sheets("CL").Rows("28:51").Hidden = Range("A22").Value = ""
        Case 23: Sheets("CL").Rows("52:97").Hidden = Range("A23").Value = ""
        Case 24: Sheets("CL").Rows("417:633").Hidden = Range("A24").Value = ""
        Case 25: Sheets("CL").Rows("286:416").Hidden = Range("A25").Value = ""
        Case 26: Sheets("CL").Rows("98:285").Hidden = Range("A26").Value = ""
      End Select
    Next
    Sheets("CL").Rows("634:808").Hidden = Range("A27").Value = ""
  End If
End Sub

Que tal amigo no me funciono con ninguna de las dos macros que enviaste, las filas 634:808 de la hoja "CL", solo se ocultan si elimino la fórmula de la celda A27 de la hoja "BASE"

La última macro funciona.

Para ocultar las filas 634:808 debes borrar las celdas A24, A25 y A26 de esa manera en A27 tendrás vacío y en ese momento se ocultan las filas.

Prueba nuevamente y me comentas.

Ya vi el problema.

En tu fórmula tienes un espacio en blanco al final de la fórmula

IF(OR(A24="x";A25="x";A26="x");"x";" ")

Cambia tu fórmula al final por vacío:

IF(OR(A24="x";A25="x";A26="x");"x";"")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas