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()".
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