openpyxl でウィンドウ枠を固定し、見出し行・列を常に表示する方法

長い表をスクロールして閲覧する際、見出し行や固定列が画面から消えると内容を把握しづらくなります。openpyxl を利用すると、freeze_panes プロパティにセル番地を指定するだけで、Excel と同様の “ウィンドウ枠の固定” を Python から簡単に設定できます。


目次

動作環境

項目内容
Python3.9 以上
ライブラリopenpyxl (pip install openpyxl)
入力ファイル例time_tracking.xlsx
出力ファイル例time_tracking_frozen.xlsx

1. 見出し行(1~4 行目)を固定する

from openpyxl import load_workbook

wb_path = 'time_tracking.xlsx'
wb = load_workbook(wb_path)
ws = wb.active

# A5 を起点に枠固定 → 1~4 行目が常に表示
ws.freeze_panes = 'A5'

wb.save('time_tracking_frozen.xlsx')
ポイント説明
freeze_panes = 'A5'指定セル A5 の「左上」がスクロールの基準となり、A1:A4 行が固定されます。

2. 先頭 4 列(A~D 列)を固定する

from openpyxl import load_workbook

wb = load_workbook('time_tracking.xlsx')
ws = wb.active

# F1 を起点に枠固定 → A~E 列が常に表示
ws.freeze_panes = 'F1'

wb.save('time_tracking_frozen.xlsx')
ポイント説明
freeze_panes = 'F1'F1 の左側が固定対象となり、A~E 列がスクロールしても見えます。

3. 見出し行と先頭列を同時に固定する

from openpyxl import load_workbook

wb = load_workbook('time_tracking.xlsx')
ws = wb.active

# F5 を起点に枠固定 → A~E 列と 1~4 行目が同時に固定
ws.freeze_panes = 'F5'

wb.save('time_tracking_frozen.xlsx')
ポイント説明
freeze_panes = 'F5'起点セルより の範囲が固定されるため、行と列の両方をまとめて固定できます。

応用アイデア

シナリオ設定例効果
タイトル行だけ固定ws.freeze_panes = 'A2'1 行目を常に表示し、列は自由にスクロール
タイトル列だけ固定ws.freeze_panes = 'B1'A 列を固定し、行は自由にスクロール
ダッシュボード形式の表表ヘッダー行とメニュー列を同時固定 (ws.freeze_panes = 'C3')見出し+カテゴリ列を常に表示

まとめ

  • freeze_panes にセル番地を指定すると、そのセルの 左上 部分が固定範囲となります。
  • 行だけ・列だけ・行列同時の 3 パターンを状況に応じて使い分けると、閲覧体験が向上します。
  • 誤って見出しが外れた場合は、ws.freeze_panes = None とすると固定を解除できます。

本設定を取り入れることで、大量データを扱う Excel レポートでも可読性を保てます。レポート自動生成スクリプトにぜひ組み込んでみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次