Ocultar serie de columnas de acuerdo a una condición en un rango de filas

Tengo una hoja con una rango de filas con nombres de columnas. SEM 1, SEM 2, SEM 3 y SEM 4. Por ejemplo:

Lo que quiero es ejecutar una macro en la que me oculte todas las columnas que coincidan con el valor SEM 1. Quedaría así:

Ojalá puedan ayudarme. Si aprendo como ocultar SEM 1 podré identificar con base a otras condiciones.

1 respuesta

Respuesta
1

14.03.17

Buenas noches, Sandra

Como no mencionaste cómo saber qué semana ocultar, la rutina que te comparto inicia preguntándote ese dato. Bastará que le digas sólo el número.

Accede al Editor de VBA (Atajo: Alt + F11), allí inserta un módulo (Insertar-Módulo) y pega el siguiente código:

Sub OcultaSem()
LaLinea = 5 ' SANDRA, indica numero de línea donde buscar el título de cada semana
'  
QueHago = InputBox("Indicar el # de semana a ocultar: " & Chr(10) & "Sólo el número" & Chr(10) & "(vacío para salir)", "INDICAR SEMANA")
If QueHago <> "" Then
    cont = 0
    UltCol = Cells(LaLinea, Columns.Count).End(xlToLeft).Column
    Range("A1", Cells(1, UltCol + 2)).EntireColumn.Hidden = False
    LaSemana = "SEM " & Trim(QueHago)
    For LaColu = 1 To UltCol + 1
        If Cells(LaLinea, LaColu).Value = LaSemana Then
            Cells(LaLinea, LaColu).EntireColumn.Hidden = True
            cont = cont + 1
        End If
    Next
End If
ElMensaje = IIf(QueHago = "", "Procedimiento cancelado por usuario", IIf(cont = 0, "NO SE OCULTO COLUMNA ALGUNA, porque" & Chr(10) & "no se encontró " & LaSemana & " en la fila " & LaLinea, "Se ocult" & IIf(cont > 1, "aron: ", "ó: ") & cont & " columna" & IIf(cont > 1, "s", "") & Chr(10) & "con el título: " & LaSemana))
TipoMens = IIf(cont = 0, vbCritical, vbInformation)
ElTitulo = IIf(cont = 0, "NO SE OCULTARON COLUMNAS", "TERMINADO!")
Application.ScreenUpdating = True
MsgBox ElMensaje, TipoMens, ElTitulo
End Sub

Nota que, al principio del código, hay una variable donde le indicas en qué linea buscar el título SEM X.

Saludos

Fernando

.

¡Mil Gracias!  Fejoal , sirve de maravilla. Te agradezco mucho el apoyo sobre todo con el inputbox que me identifica la semana.

Para mostrar las filas ocultas solo cambio la línea 12 de True a False, por lo que puedo hacer dos botones:

Cells(LaLinea, LaColu).EntireColumn.Hidden = False

.

Hola, Sandra

Me alegro de que te haya servido.

En realidad, la rutina -antes de ocultar las columnas de la semana que le indiques- muestra todas las columnas ocultas con la instrucción:

Range("A1", Cells(1, UltCol + 2)). EntireColumn. Hidden = False

Si quisieses una rutina que muestre todo podrías asociar ese botón a una línea como esta:

Sub MuestraCols()
Cells.EntireColumn.Hidden = False
End Sub

Con ella mostrará todas las columnas ocultas de la hoja.

Saludos

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas