見出し画像

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

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

列の境界線をダブルクリックする

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

フィルターで非表示となっているセルの含めて列幅が自動調整された

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

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

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

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

可視セルのみ選択にしてから[セル]グループにある[書式]で列幅自動調整

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

2.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.で変わりませんので、お好みで使い分けてください。 私は、可視セルのみ選択状態にするショートカット等を覚えるのが面倒なので、リボンにこのマクロを登録して使っています。

参考:選択したセル範囲の列幅を自動調整するには[列の幅の自動調整]

初心者のためのOffice講座

もしよろしければサポートをお願いします。今後の執筆のかてにします。