Ocultar ciertas columnas dependiendo del valor de unas celdas

No consigo resolver esta macro.

Lo que yo quiero en mi excel 2007 es que se oculten ciertas columnas cuando ponga "ocultar" y no lo contrario.

Tengo que decir que ademas tengo siempre ocultas las columnas de la BA a la BK. Por si esto influye.
Y que para los usuarios tengo bloqueada esta pestaña y el libro.

El ejercicio es el siguiente, todo esto solo para la pestaña HUESCA, puesto que hay muchas mas:

En la celda B1 hay un desplegable para elegir entre LUGO y OCULTAR. Si se elige Lugo no pasaría nada, pero si se elige ocultar se deberían ocultar las columnas G y H.

Lo mismo ocurre con la celda C1. El desplegable es entre SANTANDER y OCULTAR. Se deberían ocultar las columnas I y J si se elige ocultar.

Y así mas.....

En D1, CUENCA y OCULTAR para las columnas K y L.

En E1, MURCIA y OCULTAR para las columnas M y N.

En F1, TERUEL y OCULTAR para las columnas O y P.

En B2, ZAMORA y OCULTAR para las columnas Q y R.

En C2, ALICANTE y OCULTAR para las columnas S y T.

En D2, y OCULTAR para las columnas U y V.

En E2, SALAMANCA y OCULTAR para las columnas W y X.

En F2, CADIZ y OCULTAR para las columnas Y y Z.

En B3, TOLEDO y OCULTAR para las columnas AA y AB.

1

1 Respuesta

2.081.265 pts. En mi sitio encontraran material de ayuda, ejemplos...

Dejo macro iniciada... debes completar con el resto de rangos.

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'solo se controla el contenido del rango B1:F2 y B3
If Intersect(Target, Range("B1:F2, B3")) Is Nothing Then Exit Sub
'según la fila de F serán las col a ocultar/mostrar
'se controla el texto en mayúsculas para cubrir distintos modos de escritura
Select Case Target.Address(False, False)
    Case Is = "B1"
        If UCase(Target.Value) = "OCULTAR" Then
            Columns("G:H").Hidden = True
        Else
            Columns("G:H").Hidden = False    'si es Lugo vuelve a mostrar las col ... Retirar la línea si no es necesaria.
        End If
    Case Is = "C1"
        If UCase(Target.Value) = "OCULTAR" Then
            Columns("I:J").Hidden = True
        Else
            Columns("I:J").Hidden = False    'si es Santander vuelve a mostrar las col ... Retirar la línea si no es necesaria.
        End If
    Case Is = "D1"
        If UCase(Target.Value) = "OCULTAR" Then
            Columns("K:L").Hidden = True
        Else
            Columns("K:L").Hidden = False    'si es Cuenca vuelve a mostrar las col ... Retirar la línea si no es necesaria.
        End If
    'completar el resto de los case ajustando las letras de las col
    End Select
End Sub

Te devuelvo tu libro para que veas dónde la coloqué y los rangos afectados. Allí podrás eliminar los comentarios si te molestan.

En D2 te faltó indicar el nombre.

PD) El texto debe ser 'Ocultar' para indicarle al usuario que debe ocultar las col... para volverlas a mostrar está la opción del nombre.

¡Gracias! 
He añadido las que faltaban y sale perfecta. ES GENIAL!!
Y con los comentarios fantástico.
Lo único, una cosa. En lugar de quedarme en las celdas de la B1:F1, B2:F2 y la B3, si yo quisiera completar mas campos  de "OCULTAR" tambien con C3, D3, E3 y F3, ¿como debería modificar la macro?


Ahora para rematar, es algo que no tenia pensado, pero viendo la eficacia, en la celda F4 se puede elegir entre "OCULTAR" y "ZGZ". Si se elige ocultar se debieran ocultar las filas (no columnas) 29, 30 y 39.
Muchas muchas gracias.

En el rango a controlar se colocan todas las referencias. Si llega hasta F3 sería:

If Intersect(Target, Range("B1:F3; F4")) Is Nothing Then Exit Sub

Aquí ya agregué F4

Te recuerdo que cada tema debe ir en consulta aparte. Si alguien busca la instrucción para ocultar 'filas' no la encontrará si está bajo el título 'Ocultar Columnas'. Por esta vez pasa.

Rows("29:30"). Hidden ya sea en False o True siguiendo el ejemplo anterior.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas