Estou trabalhando com dados importados de um banco de dados NOSQL.
Às vezes recebo planilhas com 1.000 colunas ou mais, onde a maioria das células não contém dados.
Estou procurando uma maneira de filtrar os dados e mostrar apenas linhas específicas, todas as colunas das linhas visíveis que não possuem nenhum dado serão ocultadas automaticamente.
Dessa forma, não terei que rolar horizontalmente centenas de colunas vazias em busca de informações.
Se você tiver uma solução para essa necessidade, ficarei grato.
Obrigado,
Hanan Cohen
Responder1
Este código ocultará colunas se apenas a célula do cabeçalho for preenchida:
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
Se não houver cabeçalhos de coluna, faça o2dentro de1.
Responder2
Este código VBA ocultará todas as colunas em branco, independentemente de terem ou não um cabeçalho.
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:
- Se você estiver usando um comando de filtro padrão do menu para filtrar
os registros, execute este código primeiro e depois filtre. - Se você estiver usando código VBA para filtrar os registros, chame essa sub-rotina primeiro em seu código. Nesse caso, seria melhor substituir "CommandButton1_Click" por algum outro nome, talvez "Private Sub HideBlankColumn()".
Responder3
Modifiquei o código Rajesh S para cuidar dos filtros aplicados, para sair do loop interno o mais rápido possível e para exibir colunas se os filtros aplicados alterarem as linhas visíveis. Execute HydeEmptyColumns após a filtragem.
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