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