1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フィルターで非表示となっている行を無視して、列幅を自動調整する

Last updated at Posted at 2024-10-14

Excelで列幅をセルの文字列に合わせて自動調整するには、列番号の境界線をダブルクリックすれば、自動調整されます。

スクリーンショット (8).png

なお、フィルターで一部の行が非表示になっている場合は、列番を自動調整したときに、下記のように非表示になっている行も含めて列幅が調整されます。

スクリーンショット 2024-10-14 132619.png

長い文字が入力された行が非表示の場合に、最長の文字が入力されたセルに合わせて自動調整されるため、上記画像のように余分な幅が生まれます。
フィルター箇所のみを印刷等で横幅1ページで印刷する場合に、なるべく文字が小さくならないようにしたいときは、この余白は余計です。かと言って、自分で幅を調整するのは面倒・・・。

そういうときは2つの対応策があります。

1.可視セルのみ選択状態にしてセルの書式から列幅を自動調整する

列幅を調整したいセルを範囲選択します。
そのままでは非表示の箇所も含みますので、セルを範囲選択した状態でALT+;で可視セルのみを選択状態にします。
その上で、[ホーム]タブの[セル]グループにある[書式]をクリックして[列の幅の自動調整]をクリックします。

スクリーンショット 2024-10-14 133606.png

そうすると、非表示のセルは無視して、列幅が自動調整されました。(上記画像はすでに実行後の状態です。)

2.ExcelVBAで列幅を自動調整する

列幅を自動調整したい列を下記のように選択して、マクロを実行します。
そうすると、フィルターで非表示となっている行を無視して自動調整されます。(下記の画像はすでに実行後の状態です。)

スクリーンショット 2024-10-14 133426.png

コードは下記の通りです。
ExcelVBA
Sub sb非表示セルを無視して列幅自動調整()
    Dim i As Long
    For i = 1 To Selection.Columns.count
        Call sb非表示セルを無視して列幅自動調整サブ(i)
    Next i
End Sub

Sub sb非表示セルを無視して列幅自動調整サブ(columnIndex As Long)
'用途:選択列の幅を表示されている行の最大列幅で自動調整(非フィルター非表示を考慮しない)   
    Dim SelectedColumn As Range
    ' アクティブシートの使用範囲に基づいて範囲を設定
    Set SelectedColumn = Intersect(Selection.Columns(columnIndex), ActiveSheet.usedRange)
   
    Dim TargetRng As Range
    Dim MaximumColumnWidth As Double
    MaximumColumnWidth = 0 ' 最大列幅を初期化子※Double型としているのは、列幅が小数点以下まで取得可能なため
       
    ' 最初に列幅を最小(0)に設定します。
    Selection.Columns(columnIndex).ColumnWidth = 0
   
    For Each TargetRng In SelectedColumn.Rows ' 選択している列内の各セルをループ
        If Not TargetRng.Hidden And Not IsEmpty(TargetRng.Value) Then ' セルの行が非表示でなく、セルが空でない場合
                 
            TargetRng.Columns.AutoFit ' 列幅を自動調整
            Dim AutoFitWidth As Double
            AutoFitWidth = TargetRng.ColumnWidth ' AutoFitWidthに自動調整した列幅を代入
           
            If AutoFitWidth > MaximumColumnWidth Then ' 自動調整した列幅がこれまでの最大列幅より大きい場合
                MaximumColumnWidth = AutoFitWidth ' 最大列幅を更新
            End If
        End If
    Next TargetRng
 
    SelectedColumn.ColumnWidth = MaximumColumnWidth ' 選択している列全体の列幅を最大列幅に設定
       
End Sub
実行結果自体は、1.と2.で変わりませんので、お好みで使い分けてください。 私は、可視セルのみ選択状態にするショートカット等を覚えるのが面倒なので、リボンにこのマクロを登録して使っています。
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?