Excel の テーブル機能 を用いると、列ごとの自動フィルターやデザインの統一、構造化参照による関数の簡略化など、多くのメリットが得られます。Python の openpyxl では Table
クラスと TableStyleInfo
クラスを組み合わせることで、ブック生成時にテーブルを自動設定できます。本記事では、見やすさと集計効率を向上させるテーブル作成手順を解説いたします。
目次
動作環境
項目 | 内容 |
---|
Python | 3.10 以上 |
ライブラリ | openpyxl (pip install openpyxl ) |
入力ファイル例 | sales_data.xlsx |
出力ファイル例 | sales_data_table.xlsx |
サンプルコード
from openpyxl import load_workbook
from openpyxl.worksheet.table import Table, TableStyleInfo
# 1. ワークブックとシートを取得
wb = load_workbook('sales_data.xlsx')
ws = wb.active
# 2. テーブル範囲と表示名を設定
tbl = Table(
displayName='SalesTbl', # テーブル名(英字 + 数字先頭不可)
ref='C3:H20' # 見出し行を含む範囲
)
# 3. テーブルスタイルを作成
style = TableStyleInfo(
name='TableStyleMedium4', # 既定スタイル名(Medium 系は配色バランス良好)
showRowStripes=True, # 行ごとに縞模様
showColumnStripes=False, # 列の縞模様は無効
showFirstColumn=True, # 最左列を強調(太字 + 色)
showLastColumn=False # 最右列は通常表示
)
tbl.tableStyleInfo = style
# 4. シートへテーブルを追加
ws.add_table(tbl)
# 5. 保存
wb.save('sales_data_table.xlsx')
パラメータ解説
パラメータ | 設定値 | 効果 |
---|
displayName | 'SalesTbl' | テーブル名。英数字・アンダースコアのみ使用可能 |
ref | 'C3:H20' | 見出し行を含む範囲(行列番号で指定) |
name (スタイル名) | 'TableStyleMedium4' | Excel 既定 60 種前後のスタイルを指定可能 |
showRowStripes | True / False | 行の背景色を交互表示 |
showColumnStripes | True / False | 列の背景色を交互表示 |
showFirstColumn | True / False | 最左列を太字・着色で強調 |
showLastColumn | True / False | 最右列を太字・着色で強調 |
テーブル機能の主な利点
- 自動フィルターと並べ替え
列見出しにフィルターボタンが自動追加され、範囲指定なしで絞り込みが可能です。
- 構造化参照
=SUM(SalesTbl[Amount])
のように列名で計算式を記述でき、シート構成変更時の修正コストを低減できます。
- 行追加時の書式継承
データを最終行の下へ入力すると自動でテーブル範囲が拡張され、色・罫線も維持されます。
- ピボットテーブル作成が容易
ソース範囲が動的に拡張されるため、ピボットテーブル更新時に範囲を再指定する手間が省けます。
応用アイデア
目的 | 実装ヒント |
---|
データ更新ごとにテーブル範囲を再計算 | ws.max_row と ws.max_column を使い ref を自動生成 |
色覚多様性に配慮した配色を採用 | TableStyleLight 系スタイルを指定し、彩度を抑える |
テーブルを複数シートへ自動配置 | ループでシートを回し、add_table() を連続適用 |
まとめ
Table
× TableStyleInfo
を用いると、Excel のテーブル機能を Python から再現できます。
- 行・列の縞模様や最左列強調など、視認性を高めるオプション はプロパティで簡単に切り替え可能です。
- テーブル化により フィルター・集計・書式維持 など多くのメリットが得られるため、月次レポートやデータ集計シートの自動生成にお勧めです。