【実践例付き】Python × Excelで月次レポートを完全自動化する方法

「毎月Excelで同じようなレポートを手作業で作っている…」
そんなあなたにこそ知ってほしいのが、PythonによるExcel業務の自動化です。

本記事では、月次売上レポートを自動生成 → グラフ作成 → PDF出力 → メール送信までを一気に行う実践例を紹介します。


この記事でわかること

  • PythonでExcelに書き込み・集計・グラフ化する方法
  • openpyxlとpandasを使ったレポート自動作成手順
  • レポートをPDF化・メール送信する自動処理フロー
  • 実務で応用可能なスクリプト付きの実践例

1. 自動化するレポート業務の流れ

▼自動レポート作成フロー

[元データCSV] → [Excelレポート生成] → [グラフ追加] → [PDF出力] → [メール送信]

2. 必要なライブラリをインストール

pip install pandas openpyxl matplotlib win32com.client yagmail
ライブラリ用途
pandasデータ読み込み・集計処理
openpyxlExcelファイル操作
matplotlibグラフ作成(折れ線・棒グラフなど)
pywin32PDF出力用(Excel経由)
yagmailGmailでのメール自動送信

3. サンプルデータ(CSV形式)

sales_data.csv

日付担当者売上
2025/06/01田中100000
2025/06/01鈴木120000
2025/06/02田中80000

4. Excelファイルを自動生成するコード(集計+保存)

import pandas as pd
from openpyxl import Workbook

# データ読み込みと集計
df = pd.read_csv("sales_data.csv", parse_dates=["日付"])
summary = df.groupby(["担当者"]).agg({"売上": "sum"}).reset_index()

# Excelに出力
with pd.ExcelWriter("月次レポート.xlsx", engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name="元データ", index=False)
    summary.to_excel(writer, sheet_name="集計", index=False)

月次レポート.xlsx に2シート(元データ・集計)が出力されます。


5. Excelにグラフを追加する(棒グラフ)

from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference

wb = load_workbook("月次レポート.xlsx")
ws = wb["集計"]

chart = BarChart()
chart.title = "担当者別売上"
data = Reference(ws, min_col=2, min_row=1, max_row=ws.max_row)
cats = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)

ws.add_chart(chart, "E2")
wb.save("月次レポート.xlsx")

6. ExcelをPDFに自動変換する(Windows限定)

import win32com.client

def export_pdf():
    excel = win32com.client.Dispatch("Excel.Application")
    wb = excel.Workbooks.Open(r"C:\path\to\月次レポート.xlsx")
    wb.ExportAsFixedFormat(0, r"C:\path\to\月次レポート.pdf")
    wb.Close()
    excel.Quit()

export_pdf()

Excelファイルから直接PDFを出力できます(Windows + Excel必須)。


7. 完成したレポートをメール送信(Gmail)

import yagmail

def send_report():
    yag = yagmail.SMTP("your@gmail.com", "アプリパスワード")
    yag.send(
        to="recipient@example.com",
        subject="【自動送信】月次売上レポート",
        contents="添付ファイルにて月次売上レポートをお送りします。",
        attachments="月次レポート.pdf"
    )

send_report()

まとめ:Pythonで月次レポート業務を自動化!

処理内容使用技術
データの読み込み・集計pandas
Excel出力openpyxl
グラフ追加openpyxl.chart
PDF出力win32com(Excelが必要)
メール送信yagmail + Gmail

これらを1つのPythonスクリプトにまとめて、Windowsのタスクスケジューラで毎月自動実行すれば、あなたのレポート業務は完全に自動化されます。

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