Excel: ¿alguna forma de ocultar automáticamente columnas vacías al filtrar filas?

Excel: ¿alguna forma de ocultar automáticamente columnas vacías al filtrar filas?

Estoy trabajando con datos importados de una base de datos NOSQL.

A veces recibo hojas de trabajo con 1000 columnas y más donde la mayoría de las celdas no contienen datos.

Estoy buscando una manera de que cuando filtro los datos y muestre solo filas específicas, todas las columnas de las filas visibles que no tienen ningún dato se oculten automáticamente.

De esta manera, no tendré que desplazarme horizontalmente por cientos de columnas vacías buscando información.

Si tienen una solución para esta necesidad se los agradeceré.

Gracias,

Hanan Cohen

Respuesta1

Este código ocultará columnas si solo se llena la celda del encabezado:

Sub KolumnHider()
    Dim wf As WorksheetFunction
    Dim i As Long, r As Range

    Set wf = Application.WorksheetFunction
    For i = 1 To 1000
        Set r = Cells(1, i).EntireColumn
        If wf.CountA(r) < 2 Then r.Hidden = True
    Next i
End Sub

Si no hay encabezados de columna, haga la2en un1.

Respuesta2

Este código VBA ocultará todas las columnas en blanco, tengan o no encabezado.

Private Sub CommandButton1_Click()

  Dim rng As Range
  Dim nLastRow As Long
  Dim nLastColumn As Integer
  Dim i As Integer
  Dim HideIt As Boolean
  Dim j As Long

  Set rng = ActiveSheet.UsedRange
  nLastRow = rng.Rows.Count + rng.Row - 1
  nLastColumn = rng.Columns.Count + rng.Column - 1

  For i = 1 To nLastColumn
     HideIt = True

  For j = 2 To nLastRow

    If Cells(j, i).Value <> "" Then
      HideIt = False
    End If
  Next

    If HideIt = True Then
      Columns(i).EntireColumn.Hidden = True
    End If
  Next

End Sub

Notas:

  • Si está utilizando un comando de filtro estándar del menú para filtrar
    los registros, ejecute este código primero y luego filtre.
  • Si está utilizando código VBA para filtrar los registros, primero llame a esta subrutina dentro de su código. En ese caso, sería mejor reemplazar "CommandButton1_Click" con algún otro nombre, tal vez "Private Sub HideBlankColumn()".

ingrese la descripción de la imagen aquí

Respuesta3

Modifiqué el código de Rajesh S para ocuparme de los filtros aplicados, salir del bucle interno lo antes posible y mostrar las columnas si los filtros aplicados cambian las filas visibles. Ejecute HydeEmptyColumns después del filtrado.

Public Sub HydeEmptyColumns()

  Dim rng As Range
  Dim nLastRow As Long
  Dim nLastColumn As Integer
  Dim i As Integer
  Dim HideIt As Boolean
  Dim j As Long

  Set rng = ActiveSheet.UsedRange
  nLastRow = rng.Rows.Count + rng.row - 1
  nLastColumn = rng.Columns.Count + rng.Column - 1

  For i = 1 To nLastColumn
    HideIt = True

    For j = 2 To nLastRow
      If Not Rows(j).Hidden Then
        If Cells(j, i).Value <> "" Then
          HideIt = False
          Exit For
        End If
      End If
    Next

    Columns(i).EntireColumn.Hidden = HideIt
  Next

End Sub

información relacionada