我正在處理從 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