Mejorar velocidad macro para ocultar columnas según condición

Tengo una macro creada para ocultar columnas según la condición del encabezado de esa columna ( si es 1 se muestra, si es 0 se oculta), pero es muy lenta pues va ocultando columna a columna ¿Sabéis alguna forma de aligerarla o hacerla más rápida?.

Por otro lado quisiera, si es posible, que las columnas se ocultaran en función de dos condiciones localizas por ejemplo en la celda del encabezado y la de abajo, también con valores 0,1. Actualmente la celda de selección es resultado de una multiplicación y creo que eso me relentiza tambien la ejecución del cálculo. He intentado adaptar una macro para filas que vi en otras consultas y que creo que me solventaría los dos problemas, pero sin éxito ( No tengo idea de programación). ¿Podríais ayudarme?. Muchas gracias desde ya.

Macro actualmente utilizada pero lenta:

Sub Real()

Application.ScreenUpdating = False 

Call SelectMes  'llamo a una macro que precisamente me coloca en el encabezado 1 o 0

 ActiveWindow.ScrollColumn = 4

   Dim Celda As Range

   Dim Contador

   Dim e As Integer

   For e = 4 To 400 'columnas de mi matriz de selección

       Worksheets("Sheet1").UsedRange.Columns(e).Rows(1).Select

       If ActiveCell.Value = 0 Then

         Columns(e).Hidden = True

       Else

         If ActiveCell.Value = 1 Then

             Columns(e).Hidden = False

         End If

       End If

       Next

Range("A1").Select

End Sub

Macro adaptada que no funciona.

Sub PruebaReal()

 Dim Vec, Rng As Range

Dim Q&, i&

 Vec = Range("a1", Cells("a", Column.Count).End(xlLeft)).Offset(2, 400)

Q = UBound(Vec)

For i = 5 To Q ‘ para que me tome las 400 columnas

If Not IsEmpty(Vec(1,i)) Then

   If Vec(1,i) = 1 and Vec (2,i)=1 Then   ‘ intento meter que se cumplan las dos selecciones que os comentaba antes

     If Not Rng Is Nothing Then

       Set Rng = Union(Rng, Cells("a",i))

     Else

       Set Rng = Cells("a", i)

     End If

   End If

End If

Next

Rng.EntireColumn.Hidden = True

End Sub

Añade tu respuesta

Haz clic para o