Excel - alguma maneira de ocultar automaticamente colunas vazias ao filtrar linhas?

Excel - alguma maneira de ocultar automaticamente colunas vazias ao filtrar linhas?

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

insira a descrição da imagem aqui

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

informação relacionada