EXCEL VBA – 非表示行(列)は非表示のまま、表示行(列)の高さ(幅)を一括変更する

EXCEL
この記事は約7分で読めます。
スポンサーリンク

EXCELのシートを印刷する時に、不要な行や列を非表示にして見やすくしたり1枚に収まるようにしたりすることがあると思います。それでも1枚に収まらない時は行の高さや列幅を小さくしたりして調整します。
調整したい範囲を選択して一括変更したいところですが、EXCELの [ホーム ] > [セル ] > [書式]やコンテキストメニューからでは、非表示になっている箇所まで高さや幅が変更されてしまいます。まして、非表示箇所が点在して多ければ多いほど、それを選択せずに変更していくのは、なかなか面倒です。

そこでVBAマクロを使います。私の場合は非表示行を非表示のままにしておいて、表示行のみの高さを変えることでした。

スポンサーリンク

非表示行ごと選択して表示行のみ行の高さを変更するVBA

VBAエディターを起動してモジュール作成

  1. EXCELファイルを開いた状態で、Alt + F11キーを押してVBAエディターを開きます。
  2. VBAエディターのメニューかコンテキストメニューから[挿入] > [標準モジュール]を選択してモジュールを作成します。
  3. 作成したモジュールに以下のコードをコピペしてください。
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マクロの実行

  1. EXCELに戻り、行高さを変更する範囲を選択します。
  2. Alt + F8キーを押してマクロの一覧を表示します。
  3. 作成したマクロ(この場合は 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

以上、ご参考になれば幸いです。
皆さまにすべての良きことが雪崩のごとく起きますように。

EXCEL
スポンサーリンク
スポンサーリンク
J.をフォローする
スポンサーリンク
アトリエJ.

コメント

タイトルとURLをコピーしました