Excelでよく使う「ウインドウ枠の固定」をVBAで実装する方法をご説明いたします。
なお、ウインドウ枠の固定をするには、カーソル(画面表示位置)がシートの左上に無いと、意図した位置で固定されない場合がありますので、この注意点についても合わせて解説いたします。
ウインドウ枠の固定方法
Excelで大きな表を扱うときによく使う「ウインドウ枠の固定」を、VBAで実装してみます。

VBAを使ったウィンドウ枠の固定は、以下の方法で実現できます。
- 対象のシートをアクティブにしておく
- 固定する基準のセルを選択する
- FreezePanesプロパティを使用すると、固定位置より上の行・左の列が固定される
具体的なコーディング例は、以下の通りです。
Workbooks("郵便番号.xlsx").Sheets("Sheet1").Activate
Range("B2").Select
ActiveWindow.FreezePanes = True
注意点①
対象のシートに、既に「ウインドウ枠の固定」が設定された状態だと、先ほどのコードを実行しても無視されます。(元々設定されていた固定位置が、そのまま維持されます。)
そこで、以下の1文を追加して、ウインドウ枠の固定を解除しておく必要があります。
※ウインドウ枠が固定されていない状態で以下の命令を実行しても何も起きないので、無条件で以下の命令を実行しても問題ありません。
ActiveWindow.FreezePanes = False
注意点②
冒頭でも述べましたが、ウインドウ枠の固定をするには、画面表示位置がシート左上(A1セル)になっている必要があります。
例えば、下図のようにシート内の中途半端な位置が表示されている状態で先ほどのコードを実行しても、うまくいきません。



この場合は、以下の文を追加して、画面表示位置をシート左上(A1セル)に移動してから、ウインドウ枠を固定する必要があります。
Application.Goto Range("A1"), True
注意点を考慮したコーディング例
'対象のシートをアクティブにする
Workbooks("郵便番号.xlsx").Sheets("Sheet1").Activate
'ウインドウ枠の固定を解除
ActiveWindow.FreezePanes = False
'画面表示位置をA1セルに移動する(最新のExcelでは不要)
Application.Goto Range("A1"), True
'固定したい位置を選択する
Range("B2").Select
'ウインドウ枠の固定
ActiveWindow.FreezePanes = True
コメント