列幅変更は「Excelの見やすさを劇的に改善し、読みやすい帳票を自動生成する」ための基本テクニック
Excel業務自動化では、列幅を自動で調整する処理がとても重要です。
なぜなら、次のような問題を防げるからです。
- 文字が途中で切れて見えない
- 列幅が狭すぎて読みづらい
- 手作業で列幅を調整する手間がかかる
- 帳票の見た目がバラバラになる
Pythonの openpyxl を使えば、列幅を自由に変更できます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。
基本:列幅を指定して変更する(最もシンプル)
A列の幅を20にする
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]
ws.column_dimensions["A"].width = 20
wb.save("sample.xlsx")
Python深掘りポイント
column_dimensions["A"].widthに数値を入れるだけ- 単位は「Excelの列幅の単位」
- 文字数に近いイメージ(20なら20文字程度が入る)
- 帳票の見た目を整える基本操作
複数列の幅をまとめて変更する(テンプレート作成に便利)
A〜C列の幅を一括で設定
for col in ["A", "B", "C"]:
ws.column_dimensions[col].width = 15
Python深掘りポイント
- 列名をリスト化してループするだけ
- 入力フォームやレポートの整形でよく使う
- 列幅を統一すると見た目が美しくなる
自動で列幅を調整する(内容に合わせて幅を決める)
セルの内容の長さに応じて列幅を自動設定
from openpyxl.utils import get_column_letter
for col in ws.columns:
max_length = 0
col_letter = get_column_letter(col[0].column)
for cell in col:
if cell.value:
max_length = max(max_length, len(str(cell.value)))
ws.column_dimensions[col_letter].width = max_length + 2
Python深掘りポイント
- 列内の最大文字数を取得して幅を決める
+2は余白(見やすさのため)- 「自動調整(AutoFit)」に近い動作をPythonで再現
- 大量データの帳票整形で非常に便利
特定の列だけ自動調整する(効率的)
C列だけ自動調整したい場合
from openpyxl.utils import get_column_letter
col = ws["C"]
max_length = max(len(str(cell.value)) for cell in col if cell.value)
ws.column_dimensions["C"].width = max_length + 2
Python深掘りポイント
- 全列ではなく「必要な列だけ」調整できる
- 明細表の特定列(商品名・住所など)でよく使う
行高さも合わせて調整する(見た目をさらに整える)
1行目の高さを25にする
ws.row_dimensions[1].height = 25
Python深掘りポイント
- 列幅と行高さをセットで調整すると見た目が整う
- タイトル行やヘッダー行でよく使う
例題①:入力フォームの列幅を整える
シナリオ
A列:日付
B列:担当者
C列:内容
ws.column_dimensions["A"].width = 12
ws.column_dimensions["B"].width = 15
ws.column_dimensions["C"].width = 40
Python解説
- 内容欄(C列)は長文が入るため広めに設定
- 入力フォームが見やすくなる
例題②:売上明細の列幅を自動調整する
from openpyxl.utils import get_column_letter
for col in ws.columns:
max_length = 0
col_letter = get_column_letter(col[0].column)
for cell in col:
if cell.value:
max_length = max(max_length, len(str(cell.value)))
ws.column_dimensions[col_letter].width = max_length + 2
Python解説
- データ量が多い売上明細で最も使われる
- 自動で見やすい列幅に調整される
例題③:テンプレートのヘッダー行だけ幅を広げる
ws.column_dimensions["A"].width = 25
ws.column_dimensions["B"].width = 25
ws.column_dimensions["C"].width = 25
Python解説
- ヘッダー行の項目名が長い場合に便利
- 帳票の見た目が整う
pathlib を使った読みやすい列幅変更コード
Pathオブジェクトで直感的に書ける
from pathlib import Path
from openpyxl import load_workbook
path = Path("sample.xlsx")
wb = load_workbook(path)
ws = wb.active
ws.column_dimensions["A"].width = 20
wb.save(path)
Pythonメリット
- パス結合が
/で直感的 - 大規模プロジェクトでも保守性が高い
列幅変更を業務で設計するときの視点
- 固定幅設定はテンプレート作成に最適
- 自動調整は大量データの帳票整形に最適
- 列幅と行高さをセットで調整すると見た目が整う
- pandasでは列幅を設定できないため openpyxl が必須

