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

列ヘッダーがない場合は、21

答え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

関連情報