EXCELのシートを印刷する時に、不要な行や列を非表示にして見やすくしたり1枚に収まるようにしたりすることがあると思います。それでも1枚に収まらない時は行の高さや列幅を小さくしたりして調整します。
調整したい範囲を選択して一括変更したいところですが、EXCELの [ホーム ] > [セル ] > [書式]やコンテキストメニューからでは、非表示になっている箇所まで高さや幅が変更されてしまいます。まして、非表示箇所が点在して多ければ多いほど、それを選択せずに変更していくのは、なかなか面倒です。
そこでVBAマクロを使います。私の場合は非表示行を非表示のままにしておいて、表示行のみの高さを変えることでした。
非表示行ごと選択して表示行のみ行の高さを変更するVBA
VBAエディターを起動してモジュール作成
- EXCELファイルを開いた状態で、Alt + F11キーを押してVBAエディターを開きます。
- VBAエディターのメニューかコンテキストメニューから[挿入] > [標準モジュール]を選択してモジュールを作成します。
- 作成したモジュールに以下のコードをコピペしてください。
VBA
Option Explicit ' ##### 非表示行ごと選択して表示行のみ行高さ変更 Sub ChangeVisibleRowsHeight() Dim ws As Worksheet Dim cell As Range Dim visibleRows As Range Dim targetHeight As Double ' シートを設定 Set ws = ActiveSheet ' 希望する行の高さを入力(例: 13.5) targetHeight = 13.5 ' 表示されているセルのみを対象に範囲を作成 On Error Resume Next For Each cell In ws.UsedRange.SpecialCells(xlCellTypeVisible).Rows If visibleRows Is Nothing Then Set visibleRows = cell Else Set visibleRows = Union(visibleRows, cell) End If Next cell On Error GoTo 0 ' 表示されている行の高さを変更 If Not visibleRows Is Nothing Then visibleRows.RowHeight = targetHeight End If End Sub
作成したVBAマクロの実行
- EXCELに戻り、行高さを変更する範囲を選択します。
- Alt + F8キーを押してマクロの一覧を表示します。
- 作成したマクロ(この場合は ChangeVisibleRowsHeight )を選択して[実行]をクリックします。
このVBAは、非表示の行は無視して、シート内の表示されている行のみを選択し、その高さを指定した値(この例では13.5)に変更します。コード内の targetHeight の値を変更することで、変更後の行の高さを変えることができます。
列の幅の場合
列の幅の場合も同様で、コードは下記のようになります。
VBA
Option Explicit ' ##### 非表示列ごと選択して表示列のみ列幅変更 Sub ChangeVisibleColumnsWidthInSelection() Dim ws As Worksheet Dim cell As Range Dim visibleColumns As Range Dim targetWidth As Double ' シートを設定 Set ws = ActiveSheet ' 希望する列の幅を入力(例: 15) targetWidth = 15 ' 表示されているセルのみを対象に範囲を作成 On Error Resume Next For Each cell In Selection.SpecialCells(xlCellTypeVisible).Columns If visibleColumns Is Nothing Then Set visibleColumns = cell Else Set visibleColumns = Union(visibleColumns, cell) End If Next cell On Error GoTo 0 ' 表示されている列の幅を変更 If Not visibleColumns Is Nothing Then visibleColumns.ColumnWidth = targetWidth End If End Sub
行列両方に対して実行する場合
行の高さと列の幅を同時に一括変更する場合は以下のようになります。
VBA
Option Explicit ' ##### 非表示箇所ごと選択して表示箇所のみ行高さ及び列幅変更 Sub ChangeVisibleRowsAndColumnsSizeInSelection() Dim ws As Worksheet Dim cell As Range Dim visibleRows As Range Dim visibleColumns As Range Dim targetRowHeight As Double Dim targetColumnWidth As Double ' シートを設定 Set ws = ActiveSheet ' 希望する行の高さと列の幅を入力(例: 20と15) targetRowHeight = 20 targetColumnWidth = 15 ' 表示されているセルのみを対象に範囲を作成 On Error Resume Next ' 表示されている行の範囲を作成 For Each cell In Selection.SpecialCells(xlCellTypeVisible).Rows If visibleRows Is Nothing Then Set visibleRows = cell Else Set visibleRows = Union(visibleRows, cell) End If Next cell ' 表示されている列の範囲を作成 For Each cell In Selection.SpecialCells(xlCellTypeVisible).Columns If visibleColumns Is Nothing Then Set visibleColumns = cell Else Set visibleColumns = Union(visibleColumns, cell) End If Next cell On Error GoTo 0 ' 表示されている行の高さを変更 If Not visibleRows Is Nothing Then visibleRows.RowHeight = targetRowHeight End If ' 表示されている列の幅を変更 If Not visibleColumns Is Nothing Then visibleColumns.ColumnWidth = targetColumnWidth End If End Sub
以上、ご参考になれば幸いです。
皆さまにすべての良きことが雪崩のごとく起きますように。
コメント