openpyxl でセル罫線を一括統一する方法(hair・thin・medium・thick・double まで対応)

Excel シートのデザインを揃えるうえで、罫線(ボーダー)を統一することは欠かせません。openpyxl を利用すれば、セル範囲を指定して一度に罫線を設定できます。本記事では thin(細線) を例にコードを示し、その他の border_style(hair/medium/thick/double)への切り替え方法もご説明いたします。


目次

動作環境

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

サンプルコード(細線を適用)

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

# 1. ワークブックとシートを取得
wb_path = 'sales_results.xlsx'
workbook = load_workbook(wb_path)
sheet = workbook.active

# 2. 罫線のスタイルを定義(thin)
thin_side = Side(border_style='thin', color='000000')
uniform_border = Border(
    left=thin_side,
    right=thin_side,
    top=thin_side,
    bottom=thin_side
)

# 3. 対象セル範囲(ここでは B2 以降)の罫線を統一
for row in sheet.iter_rows(min_row=2, min_col=2):
    for cell in row:
        cell.border = uniform_border

# 4. 保存
workbook.save('sales_results_bordered.xlsx')

解説

説明
Side(border_style='thin', ...)border_style'thin' を指定すると、一般的な細線が生成されます。
Border(...)左右上下すべてに同じ Side を設定すれば、セルが枠で囲まれます。
iter_rows(min_row=2, min_col=2)見出し行・列を除外したい場合は開始行・列を指定します。

他の罫線スタイルへ変更するには

スタイル指定例主な用途
'hair'Side(border_style='hair')極細線で区切りを目立たせたくない場合
'medium'Side(border_style='medium')太さをはっきりさせたい枠線
'thick'Side(border_style='thick')セクション区切りを強調したい場合
'double'Side(border_style='double')二重線でタイトル周囲を装飾するとき

いずれも thin_side の部分を置き換えるだけで適用できます。


応用ポイント

目的実装方法
行ごとに罫線を変える行番号の偶奇で if 文を分岐し、Side を切り替えます。
外枠だけを太線にするループ内で先頭列・最終列・先頭行・最終行を判定し、それぞれ別の Border を割り当てます。
既存の罫線をリセットcell.border = Border() を実行すると、罫線なしに戻せます。

まとめ

  • SideBorder を組み合わせることで、罫線を自在にカスタマイズできます。
  • 罫線スタイルは 'hair' から 'double' まで幅広く用意されており、要件に合わせて切り替えるだけで見栄えを統一できます。
  • iter_rows() でセル範囲を一括操作すれば、Excel 上の手作業を大幅に効率化できます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次