Ocultar columnas excel según valor celda

Tengo un excel que necesito que según el valor que ponga en la celda A1 oculte unas columnas.

Ejemplo: A1= BASIC que me oculte las columnas F y G

A1= PLUS que me oculte las columnas E y G

A1= PREMIUM que me oculte las columnas E y F.

Respuesta
1

Si lo quieres poner en la hoja para que se ejecute solo tras cada cambio seria asi:

Private Sub Worksheet_Change(ByVal Target As Range)
If UCase(Range("A1").Value) = "BASIC" Then
Columns("F:G").Hidden = True
ElseIf UCase(Range("A1").Value) = "PLUS" Then
Columns("E").Hidden = True
Columns("G").Hidden = True
ElseIf UCase(Range("A1").Value) = "PREMIUM" Then
Columns("E").Hidden = True
Columns("F").Hidden = True
Else
Columns("E:G").Hidden = False
End If
End Sub

Si lo quieres en una macro para ejecutarla por tu cuenta seria asi:

Sub OcultaColumnas()
If UCase(Range("A1").Value) = "BASIC" Then
Columns("F:G").Hidden = True
ElseIf UCase(Range("A1").Value) = "PLUS" Then
Columns("E").Hidden = True
Columns("G").Hidden = True
ElseIf UCase(Range("A1").Value) = "PREMIUM" Then
Columns("E").Hidden = True
Columns("F").Hidden = True
Else
Columns("E:G").Hidden = False
End If
End Sub

Le agregue el "Ucase" para que si escribes en minuscula o mayuscula igual se ejecute ya que el parametro UCASE lo que hace es pasar todo lo que esta en A1 a mayuscula.

Esta web sigue igual que siempre me elimino el saludo xD jeje :

Saludos compañero me cuentas si te sirvio.

no  me  funciona.  Te comento varias  cosas que tiene  el EXCEL  a ver  si pueden ayudar.

En  la  propia  hoja  que se  llama "comparativo"  ya tengo  

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$92" Then Exit Sub
If Target.Value = "No contratado" Then Me.[93:97].EntireRow.Hidden = True
If Target.Value = "Incluido" Then Me.[93:97].EntireRow.Hidden = False
End Sub

Entonces no se  como  poder  añadir  el que tú  me indicas.

Luego,  en  la  celda A1  yo  no  meto ningún  dato,  me coge  el valor  de  la celda  B32 de la hoja "ficha"  

Y  si lo  meto como  módulo  tampoco  me  hace  nada.

Gracias  de antemano

otra  cosa, será  necesario que cada  vez que  haga  una  modificación  (ocultar  alguna  columna)  cuando  se  vuelva a  seleccionar  otro  valor  lo primero que  tiene que  hacer  es  mostrar de  nuevo  las  tres  columnas.  

Prueba así

Private Sub Worksheet_Change(ByVal Target As Range)
If UCase(Range("A1").Value) = "BASIC" Then
Columns("F:G").Hidden = True
ElseIf UCase(Range("A1").Value) = "PLUS" Then
Columns("E").Hidden = True
Columns("G").Hidden = True
ElseIf UCase(Range("A1").Value) = "PREMIUM" Then
Columns("E").Hidden = True
Columns("F").Hidden = True
Else
Columns("E:G").Hidden = False
End If
If Target.Address <> "$B$92" Then Exit Sub
If Target.Value = "No contratado" Then Me.[93:97].EntireRow.Hidden = True
If Target.Value = "Incluido" Then Me.[93:97].EntireRow.Hidden = False
End Sub

De lo contrario podrías agregar el código debajo de la parte donde cargas el dato de la hoja ficha

Private Sub Worksheet_Change(ByVal Target As Range)
If UCase(Range("A1").Value) = "BASIC" Then
Columns("F:G").Hidden = True
ElseIf UCase(Range("A1").Value) = "PLUS" Then
Columns("E:G").Hidden = False 'Aqui esta mostrando las columnas denuevo
Columns("E").Hidden = True
Columns("G").Hidden = True
ElseIf UCase(Range("A1").Value) = "PREMIUM" Then
Columns("E:G").Hidden = False 'Aqui esta mostrando las columnas denuevo
Columns("E").Hidden = True
Columns("F").Hidden = True
Else
Columns("E:G").Hidden = False 'Aqui esta mostrando las columnas denuevo
End If
If Target.Address <> "$B$92" Then Exit Sub
If Target.Value = "No contratado" Then Me.[93:97].EntireRow.Hidden = True
If Target.Value = "Incluido" Then Me.[93:97].EntireRow.Hidden = False
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas