シート追加は「Excelに新しいシートを自動で作り、業務用の構造を整える」ための基本操作
Excel業務自動化では、新しいシートを追加してデータを書き込むという作業が非常に多く発生します。
例えば次のような場面です。
- 月次レポートで「2024年3月」などのシートを毎月追加したい
- テンプレートExcelに「集計」「明細」などのシートを自動生成したい
- 複数のデータをシートごとに分けて出力したい
Pythonでは openpyxl を使うことで、Excelに自由にシートを追加できます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。
openpyxlでシートを追加する基本(最も実務向け)
新しいシートを追加する最小コード
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
wb.create_sheet("新しいシート")
wb.save("sample.xlsx")
Python深掘りポイント
create_sheet()でシートを追加できる- 引数にシート名を渡すだけでOK
- 既存Excelにシートを追加する場合に最もよく使う
シートを特定の位置に追加する(順番を制御)
先頭にシートを追加する
wb = load_workbook("sample.xlsx")
wb.create_sheet("先頭シート", 0)
wb.save("sample.xlsx")
Python深掘りポイント
- 第2引数は「挿入位置」
0は先頭、1は2番目- レポートの構造を整えるときに便利
新規作成したExcelに複数シートを追加する
Workbook から作り始める場合
from openpyxl import Workbook
wb = Workbook()
ws1 = wb.active
ws1.title = "メイン"
wb.create_sheet("売上")
wb.create_sheet("在庫")
wb.create_sheet("顧客")
wb.save("multi_sheet.xlsx")
Python深掘りポイント
- 新規Excelはデフォルトで1シートだけ
titleで名前変更create_sheet()で好きなだけ追加できる
pandasと組み合わせて複数シートに書き込む(表形式の出力に最適)
ExcelWriter を使って複数シートを作成
import pandas as pd
df1 = pd.DataFrame({"A": [1, 2, 3]})
df2 = pd.DataFrame({"B": [4, 5, 6]})
with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer:
df1.to_excel(writer, sheet_name="Sheet1", index=False)
df2.to_excel(writer, sheet_name="Sheet2", index=False)
Python深掘りポイント
- pandas は「表形式のデータ」を書き込むのが得意
- ExcelWriter を使うと複数シートに出力できる
- 集計結果をシートごとに分けて出力する業務で非常に便利
例題①:月次レポート用に「2024-03」シートを自動追加する
シナリオ
毎月のレポート作成で、月名のシートを自動生成したい。
from openpyxl import load_workbook
from datetime import datetime
wb = load_workbook("report.xlsx")
month_name = datetime.now().strftime("%Y-%m")
wb.create_sheet(month_name)
wb.save("report.xlsx")
Python深掘りポイント
- 月次レポートの自動化で最もよく使う
- シート名を日付で自動生成できる
例題②:テンプレートExcelに「集計」「明細」シートを追加する
シナリオ
テンプレートに必要なシートを自動で追加したい。
from openpyxl import load_workbook
wb = load_workbook("template.xlsx")
wb.create_sheet("集計")
wb.create_sheet("明細")
wb.save("template_ready.xlsx")
Python深掘りポイント
- テンプレートを使う業務では「必要なシートを追加する」処理が必須
- シート構造を自動生成できるため、作業ミスがなくなる
例題③:複数のデータをシートごとに分けて出力する
シナリオ
店舗ごとの売上データをシートに分けて出力したい。
import pandas as pd
stores = {
"東京店": pd.DataFrame({"売上": [100, 200]}),
"大阪店": pd.DataFrame({"売上": [150, 250]}),
"名古屋店": pd.DataFrame({"売上": [120, 180]})
}
with pd.ExcelWriter("stores.xlsx", engine="openpyxl") as writer:
for name, df in stores.items():
df.to_excel(writer, sheet_name=name, index=False)
Python深掘りポイント
- シート名を動的に作れるため、店舗数が増えても自動対応
- 大量のExcelをまとめる業務で非常に強力
pathlib を使った読みやすいシート追加コード
Pathオブジェクトで直感的に書ける
from pathlib import Path
from openpyxl import load_workbook
path = Path("sample.xlsx")
wb = load_workbook(path)
wb.create_sheet("追加シート")
wb.save(path)
Pythonメリット
- パス結合が
/で直感的 - 大規模プロジェクトでも保守性が高い
シート追加を業務で設計するときの視点
- openpyxl は「Excelそのものを操作」するため、シート追加に最適
- pandas は「表形式のデータをシートに書き込む」場合に最適
- シート名を日付・店舗名・カテゴリ名で自動生成すると業務効率が大幅に向上
- 複数シート構造を自動生成することで、レポート作成の手間が激減
- テンプレートExcelと組み合わせると、プロ品質の帳票が自動で作れる
