業務自動化の事例集

「学んだPythonを業務でどう使うのか」を、6つの実例で見てみましょう。日々の事務作業に直結する題材を選んでいます。それぞれの事例には、業務シーン・所要時間の Before/After・サンプルコード・応用のヒントを掲載しました。学習する際の到達イメージとしてご活用ください。

まずは効果のイメージから

6つの事例を合計すると、ひと月で約 30〜40 時間の削減効果が見込めます。

30h+
想定削減時間

毎月の定型業務を集約すると、ひとり当たり月30時間前後の削減になります。

0
転記ミス

桁ズレ・コピペ漏れといった人的ミスは、自動化することでほぼゼロに近づきます。

誰でも
再現性

属人化していた作業がスクリプト化されることで、引継ぎや代行が容易になります。

事例 01 ・ コース2 で習得

月次売上集計レポートの自動化

毎月初に行っていた支店ごとの売上集計と前月比レポート作成を、ボタン一つで終わらせる。

Before
約 8 時間 / 月
  • 20支店から届く売上Excelを1つずつ開く
  • VLOOKUPで突合 → ピボット作成 → 前月比計算
  • 体裁(罫線・色・3桁区切り)を整える
  • 桁ズレや集計漏れの確認に時間を取られる
After
約 30 秒 / 月
  • python monthly_summary.py を実行するだけ
  • 集計・前月比・書式が自動で整う
  • 毎月同じファイル名にすれば、来年も再利用できる
  • ミスは構造的にゼロ

使った知識

変数・関数 リスト・辞書 for ループ openpyxl defaultdict

サンプルコード(中核部分のみ)

python
from openpyxl import load_workbook
from collections import defaultdict

def aggregate_monthly(path):
    wb = load_workbook(path, data_only=True)
    ws = wb.active
    monthly = defaultdict(lambda: {"amount": 0, "count": 0})
    for date, _, _, qty, price in ws.iter_rows(min_row=2, values_only=True):
        if not date: continue
        key = date.strftime("%Y-%m")
        monthly[key]["amount"] += qty * price
        monthly[key]["count"] += 1
    return dict(sorted(monthly.items()))

コース2 レッスン3 で完全版を解説しています →

応用のヒント

  • 取引先別・商品別など、軸を変えるだけで別の集計ツールにできる
  • 四半期・年次レポートにも横展開可能(集計期間の単位を変えるだけ)
  • Slack や Teams への自動投稿を組み合わせれば、レポート配信まで自動化できる
事例 02 ・ コース3 で習得

請求書添付メールの一括ドラフト作成

取引先50社へ、宛名と金額を差し替えながら個別メールをOutlookに下書きとして自動作成する。

Before
約 2 時間 / 月
  • Excelの取引先一覧を1行ずつ確認
  • Outlookで新規メール作成・宛先・件名・本文をコピペ
  • 金額の桁ズレや宛名違いを目視チェック
  • 50社分繰り返す
After
約 1 分 / 月
  • スクリプト実行 → Outlook の下書きに50通が自動生成
  • 宛先・件名・本文・金額が機械的に正確
  • 送信は人の目で最終チェックしてから行う(誤送信防止)

使った知識

関数定義 f文字列 openpyxl pywin32 (win32com) Copilotプロンプト

サンプルコード(中核部分のみ)

python
import win32com.client
from openpyxl import load_workbook

def build_body(name, person, amount, month):
    return (
        f"{name} {person} 様\n\n"
        "いつも大変お世話になっております。\n"
        f"{month}分のご請求書をお送りいたします。\n\n"
        f"ご請求金額: {amount:,} 円(税込)\n\n"
        "ご確認のほど、よろしくお願いいたします。"
    )

outlook = win32com.client.Dispatch("Outlook.Application")
wb = load_workbook("clients.xlsx")
for row in wb.active.iter_rows(min_row=2, values_only=True):
    name, person, email, amount = row[:4]
    mail = outlook.CreateItem(0)
    mail.To = email
    mail.Subject = f"【ご請求のご案内】{name} 様"
    mail.Body = build_body(name, person, amount, "2026年6月")
    mail.Save()      # 送信せず下書きフォルダに保存

コース3 レッスン5 で完全版を解説しています →

応用のヒント

  • 請求書PDFを添付する処理を加えれば、業務一連が自動化できる
  • 「お礼メール」「年末挨拶」など、他の定例メールにも同じ仕組みが使える
  • Gmailの場合は smtplib や Gmail API への置き換えで対応可能
運用上の鉄則

このスクリプトは送信せずに下書き作成までで止めるのがポイントです。最終確認は必ず人の目で。「自動化=判断まで機械化」ではなく、「自動化=単純作業を機械に任せる」が業務適用の原則です。

事例 03 ・ コース2 で習得

複数支店の月次Excelを 1 ファイルに統合

20支店から届くExcelファイルを、コピペ作業なしで全社版に統合する。

Before
約 1 時間 / 月
  • 20ファイルを順番に開く
  • 該当データをコピー → 全社版へペースト
  • 支店名の列を手で入力
  • 途中で他の作業に割り込まれて中断しがち
After
約 30 秒 / 月
  • フォルダにファイルを置いて、スクリプトを実行するだけ
  • 支店名はファイル名から自動付与
  • 新規支店が追加されても何も変える必要がない

使った知識

pathlib pandas for ループ リスト操作

サンプルコード

python
import pandas as pd
from pathlib import Path

folder = Path("./branches")
all_dfs = []

for file in folder.glob("*.xlsx"):
    df = pd.read_excel(file)
    df["支店"] = file.stem          # ファイル名から支店名を付与
    all_dfs.append(df)
    print(f"読込: {file.name} ({len(df)}行)")

merged = pd.concat(all_dfs, ignore_index=True)
merged.to_excel("all_branches.xlsx", index=False)
print(f"合計 {len(merged)} 行を統合しました。")

コース2 レッスン5 で詳しく解説しています →

応用のヒント

  • 支店名のかわりに「年月」「担当者名」など、フォルダ構成に応じた付与が可能
  • 各ファイルの列名が違う場合は、df.rename() でマッピングする処理を追加
  • 統合後すぐにピボット集計(事例1)へ繋げると、月次業務が一気通貫で自動化される
事例 04 ・ コース1+2 で習得

請求書PDFから金額をExcelに自動転記

取引先から受領した請求書PDFを、金額・取引先名・支払期日ごとにExcelに転記する。

Before
約 半日 / 月
  • PDFを1枚ずつ開く
  • 金額・取引先名・支払期日を目視で読み取る
  • 経理システムやExcelに手入力
  • 桁ズレ・取引先名の誤入力が発生
After
約 5 分 / 月
  • PDFをフォルダにまとめてスクリプト実行
  • 金額・取引先名・期日を自動抽出してExcelに転記
  • 抽出できなかったPDFだけ目視で確認

使った知識

文字列処理 正規表現(re) pdfplumber openpyxl エラー処理

サンプルコード(中核部分)

python
import pdfplumber, re
from pathlib import Path
from openpyxl import Workbook

def extract_invoice(pdf_path):
    """PDFから 取引先名 / 金額 / 支払期日 を抽出する。"""
    with pdfplumber.open(pdf_path) as pdf:
        text = "\n".join(p.extract_text() for p in pdf.pages)
    m_amount   = re.search(r"ご請求金額[::]?\s*([\d,]+)", text)
    m_client   = re.search(r"^(株式会社[^\n]+|[^\n]+(?:商事|工業|物産))", text, re.M)
    m_due      = re.search(r"支払期日[::]?\s*(\d{4}[/-]\d{1,2}[/-]\d{1,2})", text)
    return {
        "client": m_client.group(1) if m_client else None,
        "amount": int(m_amount.group(1).replace(",", "")) if m_amount else None,
        "due":    m_due.group(1) if m_due else None,
    }

wb = Workbook(); ws = wb.active
ws.append(["ファイル", "取引先", "金額", "支払期日"])
for pdf in Path("./invoices").glob("*.pdf"):
    info = extract_invoice(pdf)
    ws.append([pdf.name, info["client"], info["amount"], info["due"]])
wb.save("invoice_summary.xlsx")

応用のヒント

  • 抽出できなかったPDFをリスト化して、目視確認の対象を絞ると効率的
  • 領収書・見積書・契約書など、様式が決まっている書類なら同じ仕組みが使える
  • 正規表現が苦手な部分は、Copilotに「このPDFテキストから金額を抜く正規表現を書いて」と頼める
ポイント

PDFの様式が会社ごとに異なる場合、すべてを完璧に自動抽出するのは難しいです。「8割を自動化し、残り2割を人が確認する」方針が現実的です。それでも全体の作業時間は90%以上削減できます。

事例 05 ・ コース1 で習得

社員名簿のフォーマット統一(全角半角・郵便番号)

人事システムからエクスポートした社員名簿の表記ゆれを、ルールどおりに統一する。

Before
約 3 時間 / 期
  • 1,000名分のデータを目視チェック
  • 「090-1234-5678」「09012345678」「090‐1234‐5678」(全角ハイフン)が混在
  • 郵便番号も「1000001」「100-0001」「〒100-0001」が混在
  • Excelの置換ダイアログを開いて何度も実行
After
約 10 秒 / 期
  • 1関数で全データを統一規則に整形
  • 人事システムからエクスポートするたびに同じスクリプトで処理
  • 整形ルールがコード化されるため、引継ぎが容易

使った知識

関数定義 文字列メソッド 正規表現 openpyxl 辞書・置換マップ

サンプルコード

python
import re

def normalize_phone(s):
    """電話番号を 03-1234-5678 形式に統一する。"""
    if not s: return ""
    s = s.translate(str.maketrans("0123456789-", "0123456789-"))   # 全角→半角
    s = re.sub(r"[^0-9]", "", s)              # 数字以外を除去
    if len(s) == 11:    return f"{s[:3]}-{s[3:7]}-{s[7:]}"
    if len(s) == 10:    return f"{s[:2]}-{s[2:6]}-{s[6:]}"
    return s

def normalize_zip(s):
    """郵便番号を 100-0001 形式に統一する。"""
    if not s: return ""
    s = re.sub(r"[^0-9]", "", str(s))
    if len(s) == 7: return f"{s[:3]}-{s[3:]}"
    return s

# 動作確認
print(normalize_phone("090-1234-5678"))     # → 090-1234-5678
print(normalize_phone("09012345678"))         # → 090-1234-5678
print(normalize_zip("〒100-0001"))             # → 100-0001
print(normalize_zip("1000001"))                 # → 100-0001

応用のヒント

  • カナの表記ゆれ統一(半角カナ → 全角カナ)も同じ仕組みで実装可能
  • 「氏名」と「姓」「名」の分割といった整形ニーズにも応用できる
  • 事例3の支店統合と組み合わせれば、データ取り込み時点での整形まで自動化できる
事例 06 ・ コース3 で習得

Copilotとペアになり、業務独自ツールを 30 分で作る

「こういう自動化がしたい」をプロンプトとして書くだけで、Copilotがスクリプトの叩き台を提示してくれる。

Before
数日〜数週間
  • 「Excelマクロを書ける人」に依頼してから1週間待ち
  • 仕様伝達のズレで何度もやり直し
  • 自分では中身がわからず、後の改修ができない
After
約 30 分
  • Copilotに業務シーンを伝える → コードの叩き台が出る
  • コース1〜2の知識で生成コードを読み、自分で修正できる
  • 「同じ仕組みを別の業務にも」と横展開できる

使った知識

プロンプトの型 入力・出力・制約の明示 エラーメッセージを添える 生成コードの検証 段階的な改修依頼

Copilotへの依頼例(プロンプトの型)

あなたからCopilotへ
あなたは経験豊富なPython講師です。プログラミング初心者の私が業務で使えるよう、コメント多めで回答してください。

【入力】 Excelファイル orders.xlsx(列: 注文日, 商品コード, 取引先, 数量, 単価)
【出力】 商品コード別の月次売上をピボット表示し、pivot.xlsx に保存
【制約】 使用ライブラリは pandas のみ。コードは関数化。
【補足】 売上ゼロのセルは「-」と表示してほしい。

上記の仕様でPythonスクリプトを生成してください。

Copilotから返ってくる典型的なコード

python
import pandas as pd

def build_pivot(src="orders.xlsx", dst="pivot.xlsx"):
    df = pd.read_excel(src)
    df["金額"] = df["数量"] * df["単価"]
    df["月"] = pd.to_datetime(df["注文日"]).dt.to_period("M").astype(str)
    pivot = pd.pivot_table(
        df, index="商品コード", columns="月",
        values="金額", aggfunc="sum", fill_value="-"
    )
    pivot.to_excel(dst)
    print(f"{dst} を出力しました。")

if __name__ == "__main__":
    build_pivot()

コース3 でプロンプトの型を完全解説しています →

応用のヒント

  • うまく動かなかったら、エラーメッセージごとCopilotに貼り付けて再依頼
  • 「もっと処理を速くしたい」「並列化したい」「グラフを足したい」と段階的に進化させる
  • 基礎を学んだうえでCopilotを使うと、出力されたコードが読めて、業務に合わせて修正できる。これが本コースの最終ゴール

どのコースで、どの事例が作れるようになるか

学習の到達点と、作れるツールの対応関係を整理しました。

事例 コース1
Python基礎
コース2
Excel効率化
コース3
Copilot活用
01. 月次売上集計 必須 主役 +補助
02. 請求書メール一括 必須 +補助 主役
03. 複数Excel統合 必須 主役 +補助
04. PDF金額抽出 必須 必須 +補助
05. 名簿フォーマット統一 主役 +補助
06. Copilotとペア作業 必須 必須 主役
ここから始めるなら

コース1の基礎が、すべての事例の土台になります。まずは Python基礎 を完了し、業務でいちばん時間がかかっている作業に近い事例から取り組むのがおすすめです。「今いちばんつらい作業」を1つ自動化できれば、学習のリターンを実感できます。

学んだ先に得られるもの

時間の余裕

定型作業から解放され、企画・提案・改善といった付加価値の高い仕事に時間を割けるようになります。

正確性の担保

機械が処理することで、桁ズレ・抜け漏れといった人的ミスを構造的にゼロに近づけられます。

業務の再現性

属人化していた手順がコード化されることで、引継ぎ・代行・休暇時のカバーが劇的に楽になります。

提案できる人材へ

「自分で業務改善ツールを作れる人」は社内で希少です。キャリア面での選択肢が広がります。

コース1から学習を始める 先に環境構築を済ませる