Ocultar columnas en una hoja de cálculo por VBA

Tengo una hoja resumen que necesito que, al actualizarse las fórmulas, me oculte las filas en función de si en la columna C hay algún valor cero. Yo lo intenté con Select Case y que entrara en acción al activar la hoja, pero no me funcionó. Los distintos casos que barajo son los siguientes:

  1. Es igual a cero y está oculto: está bien.
  2. Es igual a cero y está visible: debe ocultar esa fila.
  3. Es distinto de cero y está oculto: debe mostrar esa fila.
  4. Es distinto de cero y está visible: está bien.

Os adjunto el archivo, por si necesitáis consultar algo. El código que tengo desactivado era el antiguo, que me relantizaba muchísimo cada vez que entraba en la hoja, por eso de hacerlo de otra manera. El código que intenté con Select Case lo perdí al hacer una copia de este libro.

https://www.dropbox.com/s/oan4s7n4zzseui5/Libros%20le%C3%ADdos.xlsm?dl=0 

1

1 respuesta

Respuesta
1

El archivo que adjuntaste tiene una macro comentada en la hoja "Resumen por leer", pero esa macro oculta filas y el título de tu pregunta es para ocultar columnas. Puedes comentar qué necesitas, en cuál hoja, qué columna hay que validar, partiendo del hecho de que todas sean visibles, cuáles se deberían ocultar.

Hola, Dante. Gracias por contestar. Ahora acabo de ver el fallo: puse columnas en vez de filas. Perdón por la confusión.

La hoja se llama "Resumen por leer". Necesito que oculte las filas donde el valor de la columna C sea cero. La columna, por tanto, a validar sería la C.

¿Necesitas algún dato más?

Intenta con los siguientes códigos:

Este código oculta las filas, revisa fila por fila y oculta las que tienen 0

Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ActiveSheet.Unprotect
    u = Range("C" & Rows.Count).End(xlUp).Row
    Rows("3:" & u).Hidden = False
    For i = 4 To u
        If Cells(i, "C").Value = "0" Or Cells(i, "C").Value = 0 Then
            Rows(i).Hidden = True
        End If
    Next
    Application.Calculation = xlCalculationAutomatic
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True, AllowSorting:=True
End Sub

El siguiente código filtra los que son diferentes de 0

Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ActiveSheet.Unprotect
    u = Range("C" & Rows.Count).End(xlUp).Row
    If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
    ActiveSheet.Range("B1:K" & u).AutoFilter Field:=2, Criteria1:="<>0"
    Application.Calculation = xlCalculationAutomatic
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True, AllowSorting:=True
End Sub

Pero hay un detalle, para filtrar por valor cero (0), tienes que actualizar algunas fórmulas como esta de la hoja "pendientes":

=SI(CONTAR.SI(C:C,J5)>0,CONTAR.SI(C:C,J5),"0")

Estás poniendo el resultado cero entre comillas, eso te pone un texto y es diferente al valor 0

Tendrías que poner la fórmula así:

=SI(CONTAR.SI(C:C,J5)>0,CONTAR.SI(C:C,J5),0)

De esa forma podrías ocupar el código del filtro, porque es más rápido.


Sal u dos

La pregunta no admite más respuestas

Más respuestas relacionadas