
営業、総務、経理など部門を限らず、「一覧表データ形式」のワークシート操作は日常的なもの。
みなさん、こんにちは。セルネッツ竹本です。
今回は、「ワークシート作業の操作性向上」をテーマに、ウィンドウ枠の固定について解説をしたいと思います。
結論から言うと、VBAでウィンドウ枠を固定するときは「いったん解除 → A1までスクロール → 固定したい位置のセルを選択 → 固定」の4ステップで書きます。
先にA1までスクロールしておかないと、利用者がスクロールした位置のまま、ずれた場所で固定されてしまうためです。
本記事では、このコードの意味と、行数・列数を指定して固定する方法、解除の方法、注意点を解説します。
大きな一覧表、スクロールのたびに見出しを見失っていませんか?
- 行が多い顧客一覧や売上表で、どの列が何か分からなくなる
- 担当者ごとに表示や絞り込みの状態がバラバラになっている
- 入力欄を探すのに時間がかかり、入力ミスや転記漏れが出る
そのお悩み、操作性を考えた一覧表の仕組み化で解決できます。Excel専門のシステム開発会社『セルネッツ』なら、起動時のウインドウ枠固定やフィルター設定を自動化できます。入力フォームや検索ボタンを備えた使いやすい一覧表も作れます。いまの表のレイアウトを活かしたまま改善します。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料
ウィンドウ枠の固定とは?見出しを常に表示する設定
ウィンドウ枠の固定は、スクロールしても見出しの行や列が画面に残るようにするExcelの機能です。
手作業では[表示]タブ→[ウィンドウ枠の固定]で設定し、VBAではActiveWindow.FreezePanesで設定します。
両者の比較イメージ
ワークシート一覧データに対する操作ですが、カーソル位置は、ホームポジションが基本です。
[オートフィルター]を適用したり、[見出し行]、[見出し列]が、常に見えるようにしたり。
できる限り、操作性を高めるための一工夫がある親切設計を心がけましょう。オートフィルターで絞り込んだ一覧を扱うときは、絞り込み中の最終行の取り方の注意点もご覧ください。

VBAでウィンドウ枠を固定するコード
↓ウィンドウ枠を固定にするModule
'※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Sub M_ウインド枠の固定()
'※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
O_A.Activate
'★ウインド枠の固定 '★(1/4)まず解除
If ActiveWindow.FreezePanes = True Then ActiveWindow.FreezePanes = False
'[ホームポジション] '★(2/4)Home
Application.Goto Range("A1"), True
ActiveSheet.Range("A2").Select '★(3/4)次にセル選択
ActiveWindow.FreezePanes = True '★(4/4)ウィンドウ枠を固定
End Sub
コードの「O_A.Activate」の「O_A」は、シートのオブジェクト名です。シート名ではなくオブジェクト名で指定する理由は、ワークシートをID(オブジェクト名)で管理する方法で解説しています。
4ステップそれぞれの意味
- まず解除:すでに固定されていると、別の位置で固定し直せません。最初に解除して、どの状態からでも同じ結果になるようにします。
- A1へスクロール(ホームポジション):Application.Gotoの2つ目の引数をTrueにすると、A1が画面の左上に来るまでスクロールします。固定は「今見えている画面」を基準にかかるため、ここが一番大切です。
- セルを選択:選んだセルより上の行と左の列が固定されます。A2なら1行目が固定されます。
- 固定:FreezePanesをTrueにして、ウィンドウ枠を固定します。
固定される位置は「選択したセルの左上」で決まる
手順3で選ぶセルを変えると、固定される範囲が変わります。
| 選択するセル | 固定される範囲 |
| A2 | 1行目(見出し行) |
| B1 | A列(見出し列) |
| B2 | 1行目とA列 |
| C4 | 1〜3行目とA〜B列 |
行数・列数を指定して固定する方法(SplitRow・SplitColumn)
セルを選択せずに、固定する行数と列数を数値で指定することもできます。
SplitRowは固定する行の数、SplitColumnは固定する列の数です。いずれも画面の一番上・一番左から数えるので、先にスクロール位置を1に戻します。
Sub FreezeBySplit()
Worksheets("一覧").Activate
ActiveWindow.FreezePanes = False
ActiveWindow.ScrollRow = 1 '一番上までスクロール
ActiveWindow.ScrollColumn = 1 '一番左までスクロール
ActiveWindow.SplitRow = 1 '1行目を固定
ActiveWindow.SplitColumn = 1 'A列を固定
ActiveWindow.FreezePanes = True
End Sub
セルの選択位置を変えずに済むので、利用者が選んでいたセルをそのまま残したいときに便利です。
ウィンドウ枠の固定を解除する
解除はFreezePanesをFalseにするだけです。
SplitRowなどで分割していた場合は、分割の線も消すためにSplitもFalseにします。
ActiveWindow.FreezePanes = False '固定を解除
ActiveWindow.Split = False '分割の線も消す
ウィンドウ枠の固定の注意点
ウィンドウ枠の固定は、シートではなく「ウィンドウ」の設定である点に気をつけましょう。
- 先にシートをアクティブにする:ActiveWindowに対する設定なので、固定したいシートを表示してから実行します。
- スクロール位置で結果が変わる:A1までスクロールせずに固定すると、利用者が見ていた位置で固定され、上の行が見えなくなることがあります。
- ページレイアウト表示では使えない:標準表示に切り替えてから実行します。
- 開いたときに自動で固定する:ThisWorkbookのWorkbook_Openから呼び出すと、ブックを開くたびに同じ状態にそろえられます。書き方はThisWorkbookに書く処理の活用例で紹介しています。
「まず解除してから設定する」考え方は、ワークシートの状態をリセットしてバグを減らす方法と同じです。
【Point】利用者目線で考えると、こんな配慮があるとユーザビリティが向上します。
よくある質問
複数のシートにまとめて設定できますか?
一度に設定する方法はありません。
シートを1枚ずつアクティブにして、同じ処理を実行します。
今どこで固定されているかを調べるには?
ActiveWindow.SplitRowとActiveWindow.SplitColumnで、固定されている行数と列数を確認できます。
印刷したときも見出しを各ページに出せますか?
ウィンドウ枠の固定は画面だけの設定で、印刷には反映されません。
印刷では、ページ設定の「印刷タイトル」(VBAではPageSetup.PrintTitleRows)を使います。
まとめ|解除→A1へスクロール→選択→固定で、位置がずれない
VBAでウィンドウ枠を固定するときは、いったん解除し、A1までスクロールしてから、固定したい位置のセルを選んで固定します。
行数・列数で指定したいときはSplitRow・SplitColumn、解除はFreezePanes = Falseです。
今回のテーマは、「ワークシート作業の操作性向上」について、解説を行いました。
本記事が、Excel実務の効率化のご参考になれば幸いです。
一覧表の改善から簡易システム化まで、費用の目安をご案内
- 入力フォームを備えた簡易システムは30万円〜(税別)です
- 小さな改修は基本料金50,000円+時間単価で承ります
- Excelに向かない規模なら、その旨を正直にお伝えします
セルネッツでは相見積もりを歓迎しています。料金は基本料金50,000円に、要件定義・設計・開発の時間単価を加えた体系です(税別)。データ量や利用人数からExcelが不向きと判断した場合は、正直にお伝えします。システム導入相談やセカンド・オピニオンも、60分無料で承ります。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料