Modificar código para ocultar columnas en excel

Ya había hecho una pregunta en relación:

¿Cómo puedo ocultar COLUMNAS con macros en excel?

Pero seguí buscando y encontré este código que es lo que necesito, pero quiero que haga lo contrario, en este código:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub ' si la celda que se ha modificado es distinto a la A1 entonces sal de la macro
Dim N As Integer
Columns("B:AD").EntireColumn.Hidden = False 'primero las hago todas visibles
If Range("A1") <> "" Then ' si en la celda A1 hay algo escrito
For N = 2 To 30 ' N va ha valer desde 2 hasta 30
If Cells(2, N) <> Range("a1") Then Cells(2, N).EntireColumn.Hidden = True ' si la celda Fila 2 y columna n es igual a la celda A1 entonces ocultala
Next N
End If
End Sub

Se ocultan las columnas que tengan un valor "IGUAL" al que se ponga en la celda A1, pero los valores que yo manejare son variados ya que son resultados de sumas, entonces no puedo poner un numero exacto, lo que quiero es que oculte los valores igual a CERO.

Espero que me puedan ayudar a modificar el código por favor.

NOTA: El código lo saque de este post:

Macro ocultar columnas según condición fila

Agradecimientos a quien lo merece!.

1 respuesta

Respuesta
2

Para este caso la macro sería así.

Instrucciones para worksheet
1. Abre tu hoja de excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
4. Del lado derecho copia la macro

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:K19")) Is Nothing Then
k = Range("K1").Column
For j = 1 To k
If Cells(20, j) = 0 Then
Columns(j).EntireColumn.Hidden = True
Else
Columns(j).EntireColumn.Hidden = False
End If
Next
End If
End Sub

Saludos.Dam
Si es lo que necesitas.

Que tal Dam, antes que nada gracias por tu pronta respuesta.

Te comento que lo intente con el código que me das aquí:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:K19")) Is Nothing Then
k = Range("K1").Column
For j = 1 To k
If Cells(20, j) = 0 Then
Columns(j).EntireColumn.Hidden = True
Else
Columns(j).EntireColumn.Hidden = False
End If
Next
End If
End Sub

y también con el que me pusiste en el otro:

Private Sub Workbook_Open()
'oculta columnas
'por.dam
Sheets("Hoja1").Select
k = Range("K1").Column
For j = 1 To k
If Cells(20, j) = 0 Then
Columns(j).EntireColumn.Hidden = True
Else
Columns(j).EntireColumn.Hidden = False
End If
Next
End Sub

Pero tengo un problema con los 2, con el primero, al momento de dar cualquier valor en cualquier columna de la A a la K me las oculta todas, desde la A a la K todas las oculta sin dejar ninguna visible, y con el segundo es lo mismo, pero la diferencia es que al primero le puedo cambiar un solo valor y al moverme de celda inmediatamente se activa el macro, y en el 2do apenas me muevo de celda sin hacer otro movimiento y se ejecuta la macro, es decir no me deja cambiar ningún valor ya que se ejecuta de inmediato, no se si esto se deba o tenga que ver a que uso office 2010?.

Muchas gracias por tu tiempo, y no se si quieres que cierre mi otra pregunta ya que se trata de lo mismo?, gracias.

Orlando Bizuet,

Hermano mil disculpas, probé de nuevo el macro y esta perfecto, lo que pasa es que a la primera que lo hice no le di ningún valor en la fila 20 que es donde me detecta valores para ocultar, solo una ultima consulta, veo que si la celda no tiene ningún valor (es decir que este en blanca la celda) me la oculta, se puede modificar eso?, es decir que me olculte específicamente solo las columnas que tenga solo CERO.

Muchas gracias y cierro ya la otra pregunta ya que con este macro me funciono a la perfección.

Ocupa la siguiente macro, es para cuando estás tratando las celdas del rango A1 a K19, si el resultado del tratamiento en la fila 20 es igual 0, en automático te la oculta, si es blanco no hace nada.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:K19")) Is Nothing Then
k = Range("K1").Column
For j = 1 To k
If Cells(20, j) = "" Then Exit Sub
If Cells(20, j) = 0 Then
Columns(j).EntireColumn.Hidden = True
Else
Columns(j).EntireColumn.Hidden = False
End If
Next
End If
End Sub

Prueba y me comentas

Saludos. Dam

Si es lo que necesitas.

ya lo probé pero con la nueva modificación que le agregaste:

If Cells(20, j) = "" Then Exit Sub

no hace nada, ya no me oculta nada, pero bueno de igual forma ya con el primero que me diste me sirvió, en los espacios en blanco solo le di un espacio, lo bueno es que eran solo como 5 pero si hay forma de hacerlo sin el espacio estaría perfecto.

Gracias por tu tiempo Dam!.

Perdón, tienes razón, te envío la corrección.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:K19")) Is Nothing Then
k = Range("K1").Column
For j = 1 To k
If Cells(20, j) = "" Then
Else
    If Cells(20, j) = 0 Then
    Columns(j).EntireColumn.Hidden = True
    Else
    Columns(j).EntireColumn.Hidden = False
    End If
End If
Next
End If
End Sub

Saludos.dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas