Python 業務自動化 | Excel業務自動化:Excel基本操作 - Excel書き込み

Python Python
スポンサーリンク

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 が最適
  • 読み込み → 加工 → 書き込みの流れが自動化の基本

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