Mostrar y ocultar columnas según el valor de una celda

Probablemente sea sencillo, pero soy novato):

Tengo las columnas h:s las cuales son meses del año, en la celda CQ2 tengo un numero del 1-12 el cual representa el mes actual, quiero que según el valor de esa casilla solo me muestre el mes en que me encuentro, ejemplo, si abro el libro entonces la celda CQ2 automáticamente me coloca el numero del mes en el que estoy, entonces también automáticamente quiero que me deje visible solo la columna del mes en el que estoy, que las demás quedes ocultas.

2 Respuestas

Respuesta
1

Parece que llegué tarde con tu consulta. Veo que ya te la han respondido y correctamente.

Tomaste de base una respuesta mía anterior (Macro para ocultar columnas, dependiendo del valor en una celda especifica.). Si bien tu adaptación y ampliación te da los resultados correctos se debiera optimizar con el bucle dejado por Andy ya que sabes exactamente qué col ocultar.

Y si necesitas que este proceso se ejecute al abrir el libro y según la fecha en que te encuentras debe quedar en el evento Open. No necesitas mirar el valor de cierta celda.

En cambio, si vas a cambiar el contenido de la celda para solicitar que se oculten o muestren otras col entonces sí va en el evento Change de la hoja.

Te invito a leer algo más del tema DONDE COLOCAR UNA MACRO desde mi sitio web.

Sdos,

Elsa

Respuesta
1

Pega este código en el evento Open del libro:

Private Sub Workbook_Open()
Dim rCell As Range
Dim MesActual As Integer: MesActual = Format(Now, "m")
Dim MesCol As Integer: MesCol = MesActual + 7
    Range("CQ2").Value = MesActual
    For Each rCell In Range("H1:S1").Cells
        If rCell.Column = MesCol Then
            rCell.EntireColumn.Hidden = True
        Else
            rCell.EntireColumn.Hidden = False
        End If
    Next rCell
End Sub

Recuerda, en el evento open del libro, aquí:

Andy

Perdón, invertí el True y el False

Tu quieres que solo se muestre el mes actual y se escondan los otros, lo hice aleves.

Invierte:

If rCell.Column = MesCol Then
rCell.EntireColumn.Hidden = True
Else
rCell.EntireColumn.Hidden = False
End If

El False debe ir arriba y el True abajo

¡Gracias! yo igualmente ya lo hice de esta manera larga por si luego a alguien le sirve:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamtilde
'solo controlamos la celda CQ2
If Target.Address <> "$CQ$2" Then Exit Sub
Select Case Target
Case 1
Range("H:S").EntireColumn.Hidden = False
Range("I:S").EntireColumn.Hidden = xlVeryHidden
Case 2
Range("H:S").EntireColumn.Hidden = False
Range("j:S").EntireColumn.Hidden = xlVeryHidden
Range("H:H").EntireColumn.Hidden = xlVeryHidden
Case 3
Range("H:S").EntireColumn.Hidden = False
Range("k:S").EntireColumn.Hidden = xlVeryHidden
Range("H:I").EntireColumn.Hidden = xlVeryHidden
Case 4
Range("H:S").EntireColumn.Hidden = False
Range("L:S").EntireColumn.Hidden = xlVeryHidden
Range("H:J").EntireColumn.Hidden = xlVeryHidden
Case 5
Range("H:S").EntireColumn.Hidden = False
Range("M:S").EntireColumn.Hidden = xlVeryHidden
Range("H:K").EntireColumn.Hidden = xlVeryHidden
Case 6
Range("H:S").EntireColumn.Hidden = False
Range("N:S").EntireColumn.Hidden = xlVeryHidden
Range("H:L").EntireColumn.Hidden = xlVeryHidden
Case 7
Range("H:S").EntireColumn.Hidden = False
Range("O:S").EntireColumn.Hidden = xlVeryHidden
Range("H:M").EntireColumn.Hidden = xlVeryHidden
Case 8
Range("H:S").EntireColumn.Hidden = False
Range("P:S").EntireColumn.Hidden = xlVeryHidden
Range("H:N").EntireColumn.Hidden = xlVeryHidden
Case 9
Range("H:S").EntireColumn.Hidden = False
Range("Q:S").EntireColumn.Hidden = xlVeryHidden
Range("H:O").EntireColumn.Hidden = xlVeryHidden
Case 10
Range("H:S").EntireColumn.Hidden = False
Range("R:S").EntireColumn.Hidden = xlVeryHidden
Range("H:P").EntireColumn.Hidden = xlVeryHidden
Case 11
Range("H:S").EntireColumn.Hidden = False
Range("S:S").EntireColumn.Hidden = xlVeryHidden
Range("H:Q").EntireColumn.Hidden = xlVeryHidden
Case 12
Range("H:S").EntireColumn.Hidden = False
Range("H:R").EntireColumn.Hidden = xlVeryHidden
End Select
End Sub

Mae mía que largo ja. Pero de esa forma no se hará automáticamente cuando abras el libro, como pediste en tu pregunta. El que yo te mande lo hace automático cuando abres el libro.

Igual deberías valorar mi respuesta, que hace exactamente lo que pides ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas