Ocultar varias filas en Excel VBA

Ocultar varias filas en Excel VBA

Estoy intentando ocultar todas las filas que contienen el valor "xx" en la columna A y no ocultar las filas que contienen "a" en la columna A. El rango es de A8:A556. Esta macro debe activarse mediante un cambio en la celda C4.

¿Alguna idea de por qué no funciona? Aquí está el intento actual:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(True, True) = "$C$4" Then

    If Range("A8:A555").Value = "xx" Then
        Rows("8:555").EntireRow.Hidden = True
    ElseIf Range("A8:A555").Value = "a" Then
        Rows("8:555").EntireRow.Hidden = False

     End If
   End If

End Sub

¡Gracias!

EDITAR:

Hola Fixer1234, aquí está el detalle:

  • Es posible que "xx" y "a" no existan juntos si la macro funciona correctamente.
  • Sólo se deben ocultar las filas "xx"
  • Los valores "xx" no se combinan con valores que no se pueden ocultar.
  • Los valores "a" no se combinan con valores que deben ocultarse.
  • hay otras filas que no contienen "xx o "a" que no es necesario ocultar (¿debería agregar una "a" a estas columnas o eliminar completamente IfElse?).
  • La fila "xx" contiene otras fórmulas; un resultado en blanco de la fórmula significa que la fila debe estar oculta.
  • Las filas "a" tienen la misma fórmula pero producen un resultado y no deben ocultarse.

Error de tiempo de ejecución '13': el tipo no coincide y luego la depuración va al primero If Range("A8:A555").Value = "xx" Then

Respuesta1

No puedes probar todos los valores en un rango usando Range("A8:A555").Value = "xx". Se producirá un error de tipo no coincidente.

Debe recorrer cada celda del rango y probar individualmente si es Valueigual a "xx".

Para que el código se ejecute más rápido, no oculte las filas a medida que las detecte, sino cree una Rangepara Rangesocultarlas y luego ocultelas todas a la vez.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range
Dim RangeToHide As Range

    'Test if Target is C4
    If Not Intersect(Target, [C4]) Is Nothing Then
        'Loop through each cell in range and test if it's "xx"
        For Each cel In Range("A8:A555")
            If cel = "xx" Then
                If RangeToHide Is Nothing Then
                    'Initialise RangeToHide because Union requires at least 2 ranges
                    Set RangeToHide = cel
                Else
                    'Add cel to RangeToHide
                    Set RangeToHide = Union(RangeToHide, cel)
                End If
            End If
        Next
        RangeToHide.EntireRow.Hidden = True
    End If
End Sub

Respuesta2

Utilice este código VBA como módulo estándar, le ayudará a ocultar todas las filas que tengan XXo xxen la columna A.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(True, True) = "$C$4" Then

Dim i As Integer
  Application.ScreenUpdating = False



    For i = 8 To 255

    If Sheets("Sheet1").Range("A" & i).Value = "XX" Or Sheets("Sheet1").Range("A" & i).Value = "xx" Then
    Rows(i & ":" & i).EntireRow.Hidden = True
    End If


    Next i
    End If

    Application.ScreenUpdating = True


End Sub

NÓTESE BIEN

No es necesario utilizar ningún código para mostrar las filas que tienen ao A, ya que ya son visibles. Y, sobre todo, el código utilizado oculta filas específicas en la columna A.

Respuesta3

¿Cómo oculto filas separadas?
Así es como pienso:

Private Sub CheckBox1_Click()
If CheckBox1 = False Then
    [15:15].EntireRow.Hidden = True
    [3:3].EntireRow.Hidden = True
Else
    [15:15].EntireRow.Hidden = False
    [3:3].EntireRow.Hidden = False
End If

Saludos cordiales
Mattías

información relacionada