Excel書き込みは「PythonでExcelにデータを出力し、レポートや集計結果を自動生成する」ための最重要スキル
Excel業務自動化の本番は “書き込み” です。
読み込みだけでは自動化は半分。
書き込みができると、次のような業務が一気に自動化できます。
- 日次・月次レポートを自動生成
- 集計結果をExcelに出力
- 複数のExcelをまとめて1つに書き出す
- フォーマット済みのテンプレートに値を埋め込む
- グラフや表を自動作成
PythonでExcelに書き込む方法はいくつかありますが、初心者に最も扱いやすいのは pandas + openpyxl です。
ここでは、基本から実務テンプレートまで、丁寧にかみ砕いて解説します。
pandasでExcelに書き込む基本(最も簡単で実務向け)
DataFrameをそのままExcelに書き込む
import pandas as pd
df = pd.DataFrame({
"商品": ["A", "B", "C"],
"数量": [10, 20, 30],
"金額": [1000, 2000, 3000]
})
df.to_excel("output.xlsx", index=False)
Python深掘りポイント
to_excel()で一発書き込みindex=Falseは「行番号をExcelに書かない」ための設定- DataFrameを作ってしまえば、Excel出力は非常に簡単
既存Excelに書き込む(上書きではなく追記)
ExcelWriter を使って複数シートに書き込む
import pandas as pd
df1 = pd.DataFrame({"A": [1, 2, 3]})
df2 = pd.DataFrame({"B": [4, 5, 6]})
with pd.ExcelWriter("multi.xlsx", engine="openpyxl") as writer:
df1.to_excel(writer, sheet_name="Sheet1", index=False)
df2.to_excel(writer, sheet_name="Sheet2", index=False)
Python深掘りポイント
ExcelWriterを使うと複数シートに書き込めるengine="openpyxl"は Excel の標準形式(.xlsx)に対応- 実務では「複数シート出力」が非常に多い
既存Excelの特定シートに追記する(上書きしない)
openpyxl を使ってセル単位で書き込む
from openpyxl import load_workbook
wb = load_workbook("template.xlsx")
ws = wb["売上"]
ws["A1"] = "商品名"
ws["B1"] = "数量"
ws["C1"] = "金額"
ws["A2"] = "A"
ws["B2"] = 10
ws["C2"] = 1000
wb.save("template_filled.xlsx")
Python深掘りポイント
- pandas は「表全体の書き込み」に強い
- openpyxl は「セル単位の書き込み」に強い
- テンプレートExcelに値を埋め込む業務で必須
行を追加して書き込む(ログや履歴の追記に便利)
最終行を取得して追記する
from openpyxl import load_workbook
wb = load_workbook("log.xlsx")
ws = wb.active
next_row = ws.max_row + 1
ws.cell(row=next_row, column=1, value="2024-03-01")
ws.cell(row=next_row, column=2, value="処理完了")
ws.cell(row=next_row, column=3, value="OK")
wb.save("log.xlsx")
Python深掘りポイント
ws.max_rowで最終行を取得- ログ・履歴・日次記録などの追記に最適
- Excelを「データベース的に使う」場合に便利
書式付きで書き込む(色・太字・罫線など)
openpyxl のスタイルを使う
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill
wb = Workbook()
ws = wb.active
ws["A1"] = "合計"
ws["A1"].font = Font(bold=True, color="FFFFFF")
ws["A1"].fill = PatternFill(start_color="0000FF", fill_type="solid")
wb.save("styled.xlsx")
Python深掘りポイント
Fontで太字・色・サイズを設定PatternFillで背景色を設定- レポート作成で「見た目を整える」ことができる
例題①:売上集計をExcelに書き込む
シナリオ
売上データを読み込み → 合計をExcelに出力したい。
import pandas as pd
df = pd.read_excel("売上.xlsx")
total = df["金額"].sum()
out = pd.DataFrame({"売上合計": [total]})
out.to_excel("売上集計.xlsx", index=False)
Python深掘りポイント
- 読み込み → 集計 → 書き込みの流れは業務自動化の基本
- ExcelでSUM関数を使うより高速で確実
例題②:テンプレートExcelに値を埋め込む
シナリオ
テンプレートの指定セルに売上合計を入れたい。
from openpyxl import load_workbook
import pandas as pd
df = pd.read_excel("売上.xlsx")
total = df["金額"].sum()
wb = load_workbook("template.xlsx")
ws = wb["Summary"]
ws["B2"] = total
wb.save("report.xlsx")
Python深掘りポイント
- テンプレートを使うと「フォーマット済みレポート」を自動生成できる
- openpyxl はセル単位の操作に強い
例題③:複数のExcelをまとめて1つのExcelに書き込む
シナリオ
複数店舗のExcelを1つのExcelにまとめたい。
import pandas as pd
import glob
files = glob.glob("stores/*.xlsx")
dfs = [pd.read_excel(f) for f in files]
merged = pd.concat(dfs, ignore_index=True)
merged.to_excel("all_stores.xlsx", index=False)
Python深掘りポイント
globで複数ファイルを一括取得concatで縦に結合- 大量のExcelをまとめる業務で非常に便利
pathlib を使った読みやすいExcel書き込み
Pathオブジェクトで直感的に書ける
from pathlib import Path
import pandas as pd
df = pd.DataFrame({"A": [1, 2, 3]})
df.to_excel(Path("output.xlsx"), index=False)
Pythonメリット
- パス結合が
/で直感的 Pathは保守性が高く、業務コードに向いている
Excel書き込みを業務で設計するときの視点
- pandas は「表全体の書き込み」に強い
- openpyxl は「セル単位・書式設定」に強い
- テンプレートExcelを使うとレポート自動化が一気に楽になる
- 複数シート出力は ExcelWriter が便利
- 追記(ログ書き込み)は openpyxl が最適
- 読み込み → 加工 → 書き込みの流れが自動化の基本
