openpyxl で見出しセルを結合し、デザインを統一する方法

複数列にまたがる見出しを作成する場合、Excel では「セル結合」と「中央揃え」を併用すると読みやすいレイアウトになります。Python の openpyxl を使えば、セル結合・塗りつぶし・罫線設定をスクリプトで自動化できます。ここでは 行 3 の列 D~L を 1 つの見出しセルにまとめ、見た目を揃える具体例をご紹介いたします。


目次

動作環境

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

サンプルコード

from openpyxl import load_workbook
from openpyxl.styles import Alignment, Border, PatternFill, Side

# 1. ワークブックを読み込み
wb = load_workbook("attendance_log.xlsx")
ws = wb.active

# 2. 書式定義
header_fill = PatternFill(fgColor="9BC2E6", fill_type="solid")     # ブルー系
center_align = Alignment(horizontal="center", vertical="center")   # 中央揃え
thin_side = Side(color="000000", border_style="thin")              # 細線
thin_border = Border(left=thin_side, right=thin_side,
                     top=thin_side, bottom=thin_side)

# 3. 見出しセルの結合範囲を指定
header_row = 3
start_col = 4   # 列 D
end_col   = 12  # 列 L

ws.merge_cells(start_row=header_row, start_column=start_col,
               end_row=header_row,   end_column=end_col)

# 4. 結合セルに書式を適用
header_cell = ws.cell(header_row, start_col)
header_cell.value = "月次サマリー"
header_cell.fill = header_fill
header_cell.alignment = center_align

# 5. 罫線を各セルへ設定(結合による内部セルも含む)
for col in range(start_col, end_col + 1):
    ws.cell(header_row, col).border = thin_border

# 6. 保存
wb.save("attendance_log_header.xlsx")

コードの解説

ステップ説明
セル結合ws.merge_cells(start_row, start_column, end_row, end_column) へ範囲を渡します。
塗りつぶし (PatternFill)fill_type='solid' と 16 進 RGB で色を指定します。
中央揃え (Alignment)horizontalvertical の両方を 'center' に設定すると、完全な中央配置になります。
罫線 (Border)結合セル内の“実セル”すべてに罫線を繰り返し適用します。これにより、結合後も外枠が崩れません。

応用ポイント

要件実装ヒント
行見出しを複数行結合end_row を増やし、行方向にも結合を拡大します。
セル結合を解除ws.unmerge_cells("D3:L3") を実行します。
段落ごとに色を変更複数の PatternFill をあらかじめ用意し、結合範囲ごとに適用します。

まとめ

  • セル結合中央揃え をコードで自動化することで、テンプレート通りの見出し行を瞬時に再現できます。
  • PatternFillBorder を組み合わせると、デザインの一貫性が保たれ、読みやすさが向上します。
  • openpyxl の範囲指定は列番号・行番号で制御できるため、動的なレイアウト変更にも柔軟に対応できます。

業務報告書や月次レポートを自動生成する際に、ぜひお役立てください。

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

この記事を書いた人

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

目次