「Excelマクロを少し使えるようになったけれど、もっと自動化を進めたい」「毎日の集計作業を何とかしたい」——こうした声をお持ちの方に、次のステップとして強くお勧めしたいのがPythonです。プログラミングと聞くと「難しそう」と感じるかもしれませんが、Pythonは初心者にも比較的とっつきやすい言語として世界中で活用されています。本記事では、プログラミング経験がほとんどない方が業務自動化でPythonを使い始めるための3ステップを、具体的なコード例とともに解説します。
なぜPythonが業務自動化に向いているのか
Pythonが業務自動化に適している理由は大きく2つあります。まず、文法がシンプルで読みやすいことです。VBA(Excelマクロのプログラミング言語)と比べると、Pythonのコードは日本語の文章に近い構造で書かれており、「何をしているか」が直感的に理解しやすい特徴があります。
もう一つは、豊富なライブラリ(追加機能のパッケージ)です。Excelの読み書きには「openpyxl」や「pandas」、PDFの生成・操作には「ReportLab」や「PyMuPDF」、Webスクレイピングには「Requests」と「BeautifulSoup」、メール送信には標準の「smtplib」など、業務でよく発生するタスクに対応したライブラリが無料で豊富に揃っています。一から機能を実装する必要がなく、既存ライブラリを組み合わせるだけで多くの自動化が実現できます。
ステップ1「環境構築」──AnacondaまたはVSCodeを用意する
最初の壁として多くの方が挙げるのが「環境構築」です。しかし現在は、初心者向けの簡単な方法が整っています。
比較的手軽なのはAnaconda(アナコンダ)のインストールです。Anacondaはデータサイエンス向けのPythonディストリビューションで、Python本体に加えてJupyter Notebook(ブラウザで対話的にコードを実行できるツール)や主要ライブラリが一括インストールされます。公式サイト(anaconda.com)からインストーラーをダウンロードして実行する形になります。インストール自体は手順どおりに進められますが、実際にはダウンロード容量が数GB規模になるため回線速度によって所要時間が変わり、PATHの設定や既存のPython環境との競合でつまずくこともあります。「短時間で必ず終わる」ものではなく、余裕をもった時間を確保して取り組むことをおすすめします。
もう一つの選択肢はVSCode(Visual Studio Code)にPython拡張機能を追加する方法です。テキストエディタとして高機能で、コード補完・エラー表示・デバッグ機能が揃っています。「本格的にコーディングする環境を作りたい」という方にはVSCodeがお勧めです。どちらもWindows・Mac両対応です。
注意:Anacondaを企業で使う場合はライセンスの確認が必要です
Anaconda(Anaconda Distribution および Anaconda のパッケージリポジトリ)は、一定規模を超える組織での利用が有償ライセンスの対象とされています。対象となる組織規模の基準や適用条件は改定されることがあるため、業務利用の前に必ずAnaconda社の公式ライセンス条項(Terms of Service)で最新の条件をご確認ください。
ライセンスの確認が難しい場合や、個人利用の範囲を超える可能性がある場合は、python.org から配布されている公式のPython本体+VSCodeという構成を選ぶのが確実です。この組み合わせであればライセンス上の制約を気にせず業務で利用でき、必要なライブラリは pip で個別にインストールできます。本記事のコード例も、この構成で動作します。
ステップ2「最初の自動化スクリプト」──Excelファイルの読み書き
環境が整ったら、最初の自動化としてExcelファイルの読み書きに挑戦してみましょう。openpyxlとpandasという2つのライブラリが主に使われます。
openpyxlは、Excelファイルのシート・セル単位の操作に向いています。特定のセルに値を書き込んだり、書式を設定したりするのが得意です。一方、pandasはExcelを「表形式のデータ」として扱うのに優れており、大量の行をフィルタリング・集計・並び替えする処理を数行のコードで実現できます。たとえば「複数のExcelファイルを一つに結合して集計する」「特定の列の値が空白の行を削除する」といった作業は、pandasを使えば20〜30行程度のコードで自動化できます。これらのライブラリは「pip install openpyxl pandas」というコマンド一つでインストールできます。
コード例を試す前に必ずお読みください
以下のコード例は、必ず元データのコピーを取ったうえで、テスト用フォルダで実行してください。Pythonのファイル操作は確認ダイアログを出さずに実行され、既存ファイルへの上書き保存やリネームは元に戻せません(ゴミ箱にも残りません)。とくに保存先のファイル名を入力元と同じにすると、元のファイルが上書きされて失われます。本番データで動かすのは、テストデータで期待どおりの結果になることを確認してからにしてください。
コード例1:フォルダ内の複数Excelを1つに結合する
各部門から届いた同じ書式のExcelファイルを、1つのファイルにまとめる例です。どのファイル由来の行かが分かるよう、ファイル名の列を追加しています。
import pandas as pd
from pathlib import Path
# 読み込み元フォルダ(テスト用のコピーを指定してください)
SRC_DIR = Path("C:/work/excel_test/input")
# 書き出し先(入力フォルダとは別の場所・別のファイル名にする)
OUT_FILE = Path("C:/work/excel_test/output/merged.xlsx")
frames = []
for path in sorted(SRC_DIR.glob("*.xlsx")):
if path.name.startswith("~$"): # Excelが開いている間の一時ファイルは除外
continue
df = pd.read_excel(path)
df["元ファイル"] = path.name # どのファイル由来かを残す
frames.append(df)
if not frames:
raise SystemExit("対象のxlsxが見つかりませんでした")
merged = pd.concat(frames, ignore_index=True)
# 上書き事故を防ぐため、既に同名ファイルがあれば中断する
OUT_FILE.parent.mkdir(parents=True, exist_ok=True)
if OUT_FILE.exists():
raise SystemExit(f"{OUT_FILE} は既に存在します。別名を指定してください")
merged.to_excel(OUT_FILE, index=False)
print(f"{len(frames)}ファイル / {len(merged)}行を書き出しました: {OUT_FILE}")
ポイントは、書き出し先を読み込み元と別のフォルダにし、同名ファイルがあれば処理を中断している点です。自動化スクリプトは繰り返し実行するものなので、2回目の実行で前回の結果を壊さない作りにしておくと安全です。
コード例2:フォルダ内のファイルを更新日ごとに自動整理する
ダウンロードフォルダなどに溜まったファイルを、更新月のサブフォルダへ振り分ける例です。まずDRY_RUN = Trueのまま実行し、移動予定の一覧だけを確認してから実際に動かします。
from datetime import datetime
from pathlib import Path
import shutil
TARGET_DIR = Path("C:/work/file_test") # テスト用のコピーを指定してください
DRY_RUN = True # まずTrueのまま実行し、出力を確認してからFalseにする
for path in TARGET_DIR.iterdir():
if not path.is_file():
continue
ym = datetime.fromtimestamp(path.stat().st_mtime).strftime("%Y-%m")
dest_dir = TARGET_DIR / ym
dest = dest_dir / path.name
if dest.exists(): # 同名ファイルがある場合は移動せずスキップ(上書き防止)
print(f"[skip] 同名ファイルあり: {dest}")
continue
print(f"[{'dry-run' if DRY_RUN else 'move'}] {path.name} -> {ym}/")
if not DRY_RUN:
dest_dir.mkdir(exist_ok=True)
shutil.move(str(path), str(dest))
shutil.move()は移動先に同名ファイルがあると確認なしで上書きします。上のコードでは事前にdest.exists()を判定してスキップしていますが、この一行を省くとファイルが失われます。ファイル操作を伴うスクリプトでは、「まず表示だけする(dry-run)」「上書きしない」の2点を必ず入れておくことをおすすめします。
ステップ3「応用へ」──PDF処理・メール送信・Web情報収集
Excelの読み書きに慣れたら、次の3つの領域に挑戦することで、自動化の幅が大きく広がります。
- PDF処理: ReportLabを使うと、テンプレートに沿った請求書・見積書などのPDFを自動生成できます。PyMuPDFやpdfplumberを使えば、既存のPDFからテキストを抽出して集計処理に活用することも可能です。
- メール送信: Python標準ライブラリのsmtplibとemailを組み合わせると、SMTP経由で自動メールを送信できます。「毎月末に売上レポートをメールで自動送信する」といった定型業務の自動化に活用できます。ただし、GmailやOutlookでは通常のIDとパスワードによるSMTP認証が使えません(詳細は後述の注意点をご覧ください)。
- Web情報収集(スクレイピング): RequestsとBeautifulSoupを組み合わせると、Webページから必要な情報を自動取得できます。「自社が権利を持つサイトの更新状況を監視する」「公開データを提供元が認めた範囲で取得する」といった用途が考えられますが、スクレイピングは技術面より先に、対象サイトの利用規約・著作権・アクセス負荷の観点から実施の可否を確認する必要がある領域です(詳細は後述の注意点をご覧ください)。確認を済ませないまま始めないでください。
Anaconda または VSCode を用意
Excelファイルの読み書き
PDF/メール/Web情報収集
Pythonで自動化されることが多い業務の例
Pythonによる業務自動化で取り組まれることが多い、代表的なパターンをご紹介します。以下は一般的な例であり、削減できる時間や効果の大きさは、現在の作業手順や処理件数によって大きく異なります。
- 請求書PDFの自動生成: 顧客情報と取引明細が記録されたExcelから、ReportLabを使って請求書PDFを生成する仕組みです。1件ずつ手作業で作成している場合、件数が多いほど削減効果が大きくなります。一方で、帳票レイアウトの作り込みや例外パターン(値引き・分割請求・但し書きの変更など)への対応には相応の工数がかかります。
- 売上集計レポートの自動作成: 複数の部門から提出されるExcelファイルをpandasで読み込んで集計し、グラフ付きのレポートExcelを生成する仕組みです。提出フォーマットが統一されているほど効果が出やすく、逆に部門ごとに書式がばらついている場合は、先に様式を揃えることが前提になります。
- 定型メールの自動通知: 特定の条件(在庫が設定数量を下回った、申込期限が近づいた等)を満たしたときに、関係者へ自動でメール通知を送る仕組みです。見落としや対応漏れの防止につながります。宛先を誤ると影響が大きいため、まずは自分宛のテスト送信で動作を確認してから本番の宛先に切り替えてください。
ChatGPTを使ってコードを書く方法
「コードを書くのが難しい」と感じる場合でも、ChatGPTやClaudeなどの生成AIを使えばコーディングのハードルを大きく下げることができます。ポイントはプロンプト(指示文)の書き方です。
効果的なプロンプトの例をいくつか挙げます。「フォルダ内の全Excelファイルを読み込んで、A列の合計をシート名ごとに集計し、新しいExcelに書き出すPythonコードを書いてください」「smtplibを使って、GmailからCSVファイルを添付してメール送信するコードを書いてください。パスワードは環境変数から読み込む形にしてください」といった形で、やりたいことを具体的に日本語で指示するのがコツです。生成されたコードをそのまま実行するのではなく、コメント(#で始まる説明文)を読んで「何をしているか」を理解しながら少しずつ改変していくことで、自然とPythonの知識が身につきます。
Pythonで自動化できないケースと限界
Pythonは万能ではありません。自動化に向かないケースも把握しておくと、適切な使い分けができます。
- 業務システムの内部操作: 専用の業務システム(ERPや会計ソフトなど)の画面操作を自動化する場合、APIが提供されていない限りPythonだけでは難しいケースがあります。この場合はRPA(Robotic Process Automation)ツールとの組み合わせが有効です。
- 属人的な判断が必要な業務: 「この請求書は内容を確認してから承認する」のような人間の判断が必要なプロセスは、完全自動化には向きません。自動化できる部分(書類の取り込み・整形)と人間が判断する部分を切り分けることが重要です。
- リアルタイム処理が必要な業務: 大量データをミリ秒単位で処理するような高速処理には、Pythonよりも低レベルの言語が適している場合があります。ただし、日常的な業務自動化においてこの制約が問題になることはほとんどありません。
AIを活用するとさらに効率化できること
Pythonによる自動化にAIを組み合わせることで、さらに高度な効率化が実現できます。
- GitHub CopilotでコードをAIが補完: GitHub Copilotは、VSCodeなどに組み込めるAIコード補完ツールです。コメントで「やりたいこと」を日本語で書くだけで、その処理を行うコードを提案してくれます。料金は個人向け・ビジネス向け・エンタープライズ向けなど複数のプランに分かれており、無料で試せる枠が用意されている場合もあります。プラン構成・価格・利用できる機能・生成されたコードの取り扱いに関する条件は改定されることがあるため、導入前にGitHubの公式料金ページで最新の内容をご確認ください。とくに企業で利用する場合は、個人向けプランではなく組織向けプランの契約が必要になる点にご注意ください。Pythonを書き始めた段階では提案を見ながら学べる利点がある一方、提案されたコードが常に正しいとは限らないため、内容を理解したうえで採用する姿勢が欠かせません。
- Pythonスクリプトに生成AI APIを組み込む: OpenAIやAnthropicのAPIをPythonスクリプトから呼び出すことで、AIの分類・要約・抽出といった処理を自動化フローに組み込めます。たとえば「受信したメールの本文をカテゴリ分類してExcelに記録する」「OCRで読み取った請求書のデータをAIで整形・抽出する」といった用途が考えられます。ただし、APIキーの管理方法と、APIへ送信する情報の取り扱いには十分な注意が必要です(詳細は後述の注意点をご覧ください)。
Python自動化を業務で使うときの注意点
個人の練習と、業務で継続的に動かす自動化とでは、気をつけるべき点が変わります。運用に乗せる前に、次の5点を確認してください。
①ファイル操作は「元に戻せない」前提で書く
Pythonによる上書き保存・移動・削除は、確認ダイアログを出さずに実行され、ゴミ箱を経由しないため復元できません。必ず①元データのコピーで検証する、②出力先を入力元と別の場所にする、③同名ファイルがあれば中断またはスキップする、④まず表示だけを行うdry-runモードを用意する、という4点を組み込んでください。共有フォルダを対象にする場合は、他の人のファイルを壊す可能性があることも意識する必要があります。
②GmailやOutlookの自動送信はOAuthまたはアプリパスワードが必要
「smtplibにメールアドレスとログインパスワードを渡せば送信できる」という解説を見かけますが、現在のGoogle WorkspaceやMicrosoft 365では、通常のIDとパスワードによるSMTP認証(基本認証)が利用できません。セキュリティ強化のため、プロバイダ側で順次無効化されています。
自動送信を行う場合は、次のいずれかの方式を選ぶことになります。
- OAuth 2.0による認証:Google Cloud / Microsoft Entra ID 側でアプリを登録し、トークンを取得して送信する方式です。組織として正式に運用するならこちらが基本になります。実装の手間はかかりますが、管理者が権限を制御でき、退職者アカウントの扱いなども統制しやすくなります。
- アプリパスワード:2段階認証を有効にしたアカウントで、アプリ専用のパスワードを発行して使う方式です。個人アカウントや小規模な用途では現実的な選択肢ですが、利用できるかどうかは組織のポリシーや契約プランによって異なり、管理者が発行を禁止している場合もあります。また提供条件が変更されることもあるため、利用前に各サービスの公式ドキュメントで最新の状況をご確認ください。
- メール配信サービスのAPIを使う:通知メールの送信が目的であれば、メール配信専用サービスのAPIを使うほうが、到達率・送信ログ・エラー処理の面で安定します。
いずれの方式でも、パスワードやトークンをコード内に直接書かないことが前提です。環境変数や設定ファイル(バージョン管理の対象外にする)から読み込む形にしてください。
③スクレイピングは実施前に規約・法令・負荷の確認を
Webサイトから情報を自動取得する行為は、技術的に可能であることと、実施してよいことが別問題です。少なくとも次の点を確認してください。
- 対象サイトの利用規約で、自動収集・機械的アクセスが禁止されていないか
- robots.txt でクロールが拒否されていないか
- 取得した内容の利用方法が著作権法の範囲内か(取得できること=再利用してよいこと、ではありません)
- 取得内容に個人情報が含まれていないか。含まれる場合は個人情報保護法上の取り扱いを検討したか
- アクセス頻度が相手サーバーの負荷にならないか(間隔を空ける、時間帯を選ぶ、必要最小限にとどめる)
- 公式のAPIやデータ配布が提供されていないか(提供されていれば、そちらを使うのが確実です)
とくに会員登録やログインが必要なページ、有料コンテンツ、競合他社の価格情報などは、規約違反やトラブルにつながりやすい領域です。短時間に大量のリクエストを送れば、意図せず相手のサービスを妨害したと判断される可能性もあります。業務として実施する場合は、自己判断で進めず、社内の法務担当や専門家に確認することをおすすめします。
④APIキーの管理と、AIに送る情報の線引きを決める
生成AIのAPIを自動化に組み込む場合、2つの観点で注意が必要です。
APIキーの管理──APIキーは、そのまま従量課金に直結する認証情報です。コード内に直接書き込んだり、スクリプトをそのままチャットツールや社外に共有したりすると、第三者に利用されて想定外の請求が発生する恐れがあります。環境変数や.envファイルから読み込む形にし、.envはバージョン管理の対象から除外してください。共有フォルダにスクリプトを置く場合も同様です。あわせて、提供元の管理画面で利用上限額やアラートを設定しておくと、想定外の課金に早く気づけます。
送信する情報の線引き──APIに送ったデータは、自社の管理外のサーバーで処理されます。顧客の個人情報、取引先との契約内容、未公開の経営数値、従業員の個人データなどを、社内ルールを決めないまま送信することは避けてください。実務上は、①送ってよい情報の範囲を先に定義する、②個人情報は送信前にマスキングする、③入力データが学習に利用されない契約・設定になっているかを提供元の規約で確認する、という手順を踏むのが安全です。事業者向けプランでは入力データを学習に使わない旨が定められている場合がありますが、条件はサービスやプランによって異なるため、必ず最新の利用規約でご確認ください。
⑤作った人しか直せない状態にしない
業務自動化スクリプトでよくある失敗が、作成した担当者の異動・退職後に誰も保守できなくなることです。Excelマクロの属人化と同じ問題が、Pythonでも起こります。最低限、①スクリプトの目的・実行タイミング・入出力先を書いたメモを残す、②実行環境(Pythonのバージョンと使用ライブラリ)を記録する、③保存場所を個人PCではなく共有の場所にする、の3点を運用ルールに含めてください。業務の根幹に関わる処理を自動化する場合は、個人のスクリプトではなく、保守を前提としたシステムとして開発することもご検討ください。
まとめ──まず試すべき自動化タスク5選
Pythonによる業務自動化の第一歩として、特に効果を感じやすいタスクを5つご紹介します。
- 複数Excelファイルのデータを1枚のシートに自動統合・集計する
- 特定フォルダ内のファイルを日付・条件で自動整理・リネームする
- 毎月の定型メールを宛先リストから一斉自動送信する
- Webサイトの特定情報(価格・在庫状況など)を定期的に自動収集してExcelに保存する
- ExcelデータからPDFの帳票(請求書・納品書)を自動生成する
どれか一つでも自動化できれば、その経験がPython学習の大きな動機になります。「まず小さく始めて、少しずつ広げる」が業務自動化成功のコツです。なお、プログラミングを書かずに自動化したい場合はRPAの導入やノーコード・ローコード開発、Googleスプレッドシート中心の業務であればGoogle Apps Scriptという選択肢もあります。どの手段が適しているかは、対象業務と社内の体制によって変わります。
株式会社アイ・エス・プライムでは、Pythonを活用した業務自動化スクリプトの開発や、DX推進のご支援を承っています。「どこから手をつければいいか」という段階からお気軽にご相談ください。





