Excel - 筛选行时有没有办法自动隐藏空列?

Excel - 筛选行时有没有办法自动隐藏空列?

我正在处理从 NOSQL 数据库导入的数据。

有时我会得到有 1000 列或更多列的工作表,其中大多数单元格中没有数据。

我正在寻找一种方法,当我过滤数据并仅显示特定行时,所有没有数据的可见行的列都会自动隐藏。

这样,我就不必水平滚动数百个空白列来寻找信息。

如果您能解决这一需求,我将不胜感激。

谢谢,

哈南·科恩

答案1

如果仅填充了标题单元格,此代码将隐藏列:

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

如果没有列标题,则2变成1

答案2

此 VBA 代码将隐藏所有空白列,无论它们是否有标题。

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

笔记:

  • 如果您使用菜单中的标准过滤命令来过滤
    记录,请先运行此代码,然后进行过滤。
  • 如果您使用 VBA 代码来过滤记录,请先在代码中调用此子程序。在这种情况下,最好将“CommandButton1_Click”替换为其他名称,例如“Private Sub HideBlankColumn()”。

在此处输入图片描述

答案3

我修改了 Rajesh S 代码以处理应用的过滤器,尽快退出内部循环,并在应用的过滤器更改可见行时取消隐藏列。过滤后运行 HydeEmptyColumns。

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

相关内容