Python 業務自動化 | Excel業務自動化:Excel基本操作 - 列幅変更

Python Python
スポンサーリンク

列幅変更は「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 が必須

タイトルとURLをコピーしました