我正在处理从 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