openpyxl で列幅を一括調整し、表の視認性を高める方法

Python と openpyxl を組み合わせれば、Excel シートの列幅を数行のコードで統一できます。セル内容が途中で折り返される、あるいは文字が見切れてしまうといった課題を解消し、レポートを読みやすくする手法をご紹介いたします。


目次

動作環境

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

サンプルコード

from openpyxl import load_workbook

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

# 2. 列幅の設定値(キー:列記号、値:幅)
column_widths = {
    'C': 10,   # 部門コードなど短い文字列
    'D': 28,   # 商品名など中程度の文字列
    'E': 28    # 備考欄など
}

# 3. 列幅を一括適用
for col_letter, width in column_widths.items():
    ws_report.column_dimensions[col_letter].width = width

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

コードのポイント

処理説明
load_workbook()既存ファイルを読み込みます。read_only=False が既定値のため書き込み可能です。
column_dimensions[col_letter].width対象列の幅を「ポイント」単位で指定します。Excel 上のドラッグ操作と同じ結果になります。
辞書で管理列記号と幅を辞書にまとめることで、後からメンテナンスしやすくなります。

よくある質問

質問回答
自動調整はできますか。openpyxl には自動調整機能がないため、セル内容を走査し最長文字数から幅を算出する関数を自作するアプローチが一般的です。
幅の単位は何ですか。Excel UI で表示される「標準幅」と同じポイント換算(約 1 文字 ≒ 1 単位)です。
複数シートに適用したい場合は。for ws in workbook.worksheets: のループを追加し、各シートへ同じ辞書を適用してください。

応用アイデア

目的実装のヒント
動的に列幅を算出したい各セルの文字数を len(str(cell.value)) で取得し、最大値 + 余白 を幅に設定します。
空白列を挿入して余白を確保ws_report.insert_cols(idx) で余白用の列を追加すると可読性が向上します。
表示形式ごとに列幅を変える数値列は狭く、テキスト列は広く設定してメリハリを付けます。

まとめ

  • 列幅を調整するだけでも表の視認性が大幅に改善 され、レポートの品質向上に直結します。
  • openpyxl を利用すれば、手動操作をスクリプトへ置き換え、再現性と作業効率を確保できます。
  • 辞書形式で列幅を管理することで、対象列の追加・変更に柔軟に対応できます。

ぜひご自身の Excel 自動化フローに取り入れてみてください。

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

この記事を書いた人

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

目次