【ExcelVBA・マクロ】ウィンドウ枠の固定・分割をVBAで操作する方法|FreezePanes・Splitの使い方【コピペOK】

ExcelVBA

はじめに

Excelで見出し行が多い表を扱っていると、下にスクロールしたときに「今見ている行が何の項目なのか」分からなくなってしまうことがあります。そんなときに便利なのが「ウィンドウ枠の固定」機能です。

この記事では、ウィンドウ枠の固定(見出し行・見出し列を常に表示する機能)と画面分割を、VBAから自動で設定する方法を解説します。手作業でメニューから設定する手間を省き、ファイルを開いたときに自動で見やすい状態にしたい方はぜひ参考にしてください。

この記事を読むと以下のことが分かります。

  • FreezePanesプロパティで見出し行・見出し列を固定する方法
  • 固定を解除する方法
  • Splitプロパティで画面を分割する方法
  • ブックを開いたときに自動で固定を設定する方法

ウィンドウ枠の固定とは

「ウィンドウ枠の固定」は、Excelの「表示」タブにある機能で、指定した行・列より上・左側を常に表示したまま、それ以外の部分だけをスクロールできるようにする機能です。見出し行を固定しておけば、大量のデータをスクロールしても項目名を見失いません。

VBAではActiveWindow.FreezePanesプロパティを使うことで、この設定を自動化できます。

見出し行を固定する

先頭行(1行目)を固定するコードは以下の通りです。

Sub FreezeTopRow()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ws.Activate
    ws.Range("A2").Select
    ActiveWindow.FreezePanes = True
End Sub
スポンサーリンク
スポンサーリンク

コードの解説

  • FreezePanesは「選択しているセルの左上を基準に、それより上・左側を固定する」という仕組みです。今回はA2セルを選択してからFreezePanes = Trueを実行しているので、1行目(A2より上の行)が固定されます。
  • 固定を行うには対象のシートがアクティブになっている必要があるため、ws.Activateでシートをアクティブにしてからセルを選択しています。

見出し行と見出し列を同時に固定する

行だけでなく、左側の列(例えば商品コードなどの列)も固定したい場合は、固定したい範囲の右下にあたるセルを選択します。

Sub FreezeRowAndColumn()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ws.Activate
    ws.Range("B2").Select
    ActiveWindow.FreezePanes = True
End Sub

B2を選択して固定を実行すると、1行目(見出し行)とA列(見出し列)の両方が固定されます。「固定したい行の1つ下・固定したい列の1つ右」のセルを選ぶのがポイントです。

固定を解除する方法

固定を解除するには、FreezePanesFalseを指定します。

Sub UnfreezePanes()
    ActiveWindow.FreezePanes = False
End Sub

すでに固定されているかどうかを確認してから処理を分けたい場合は、ActiveWindow.FreezePanesの値をIf文で判定することもできます。

Sub ToggleFreezePanes()
    If ActiveWindow.FreezePanes Then
        ActiveWindow.FreezePanes = False
    Else
        ActiveSheet.Range("A2").Select
        ActiveWindow.FreezePanes = True
    End If
End Sub

このマクロをボタンに登録しておけば、クリックするたびに固定のオン・オフを切り替えられます。

画面を分割する(Splitプロパティ)

固定と似た機能に「画面分割」があります。分割は固定と違い、分割した両方の領域を別々にスクロールできるのが特徴です。同じ表の離れた行を見比べたいときに便利です。

Sub SplitWindow()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ws.Activate
    ws.Range("A10").Select
    ActiveWindow.Split = True
End Sub

分割位置を細かく指定したい場合は、SplitRowSplitColumnプロパティでセルの行数・列数を直接指定することもできます。

Sub SplitWindowByCount()
    ActiveWindow.Split = True
    ActiveWindow.SplitRow = 5      ' 上から5行目で分割
    ActiveWindow.SplitColumn = 0   ' 列方向は分割しない
End Sub

分割を解除するには、固定と同じようにSplit = Falseを指定します。

Sub RemoveSplit()
    ActiveWindow.Split = False
End Sub

ブックを開いたときに自動で固定する

ファイルを開いた瞬間に見出し行を固定しておきたい場合は、ThisWorkbookモジュールのWorkbook_Openイベントを使います。

' ThisWorkbookモジュールに記述
Private Sub Workbook_Open()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    ws.Activate
    ws.Range("A2").Select
    ActiveWindow.FreezePanes = True
End Sub

これで、ファイルを配布した相手が開いたときにも、自動的に見出し行が固定された状態になります。

注意点

  • FreezePanesSplitはウィンドウ(ActiveWindow)に対する設定です。同じブックを複数のウィンドウで開いている場合、ウィンドウごとに設定する必要があります。
  • 固定・分割を実行する前に、対象のシートをアクティブにし、基準となるセルを選択しておく必要があります。選択を省略するとエラーになったり、意図しない位置で固定されたりするので注意してください。
  • すでに固定されている状態でもう一度FreezePanes = Trueを実行すると、その時点で選択しているセルを基準に固定位置がずれてしまいます。固定し直したい場合は、一度Falseにしてから再度Trueにすると安全です。

まとめ

この記事では、VBAでウィンドウ枠の固定・分割を操作する方法を紹介しました。

  • ActiveWindow.FreezePanes = Trueで見出し行・見出し列を固定できる
  • 固定位置は「固定したい範囲の右下のセル」を選択してから実行する
  • ActiveWindow.Split = Trueで画面を分割でき、SplitRowSplitColumnで分割位置を指定できる
  • Workbook_Openイベントと組み合わせれば、ファイルを開いたときに自動で見やすい状態にできる

大きな表を扱う機会が多い方は、ぜひこのマクロをテンプレートファイルに組み込んで、毎回の手作業を減らしてみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

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