Pythonで仕事を自動化する方法|初心者向け業務自動化入門
Pythonを使って日常業務を自動化する方法を解説。ファイル操作、Excel処理、メール送信、Web操作など、実務で使える自動化スクリプトを紹介。
editor

チョットデキルの編集部です。プログラミング学習に役立つ情報をお届けします。
Pythonは、日常の繰り返し作業を自動化するのに最も適したプログラミング言語の一つです。ファイルの整理、Excelデータの集計、メールの一斉送信、Webブラウザの操作まで、数十行のコードで実現できます。この記事では、実務で即使える自動化の具体例をコード付きで紹介します。プログラミング初心者でも、Python基礎の文法を押さえていれば十分に取り組める内容です。
Python による業務自動化 とは
Excel / メール / Web スクレイピング / PDF 処理など、繰り返しの単純作業を Python で自動化する手法のことです。1 度書けば毎日数十分の手作業がボタン 1 つで完了します。
TL;DR 早わかりサマリー
- Python 自動化は「定型業務 + ファイル処理 + Web 連携 + メール送信」の 4 領域から始めるのが最短
- openpyxl / pandas / requests / smtplib(標準ライブラリ)/ Selenium の 5 ライブラリで業務の 8 割をカバー
- 1 日 30 分の業務を自動化するだけで、年間 130 時間の時短になります
- AI と組み合わせれば「AI が判断して Python が実行」の高度自動化も実現可能
ファイル操作の自動化(os / pathlib)
業務で最も頻繁に発生する作業の一つが、ファイルの整理です。大量のファイルを手作業でリネームしたり、フォルダに振り分けたりするのは時間の無駄です。Pythonの標準ライブラリだけで、こうした作業を一瞬で終わらせることができます。
フォルダ内のファイルを拡張子別に振り分ける
Python
from pathlib import Path
import shutil
source = Path("./downloads")
for file in source.iterdir():
if file.is_file():
ext = file.suffix.lstrip(".") # 例: "pdf", "xlsx"
dest_dir = source / ext
dest_dir.mkdir(exist_ok=True)
shutil.move(str(file), str(dest_dir / file.name))
print("ファイルの振り分けが完了しました")pathlibはPython 3.4以降で使える標準ライブラリで、従来のos.pathよりも直感的にパスを扱えます。Pathオブジェクト同士を/演算子で結合でき、コードの可読性が大きく向上します。
ファイル名の一括リネーム
Python
from pathlib import Path
from datetime import datetime
target = Path("./reports")
today = datetime.now().strftime("%Y%m%d")
for i, file in enumerate(sorted(target.glob("*.pdf")), start=1):
new_name = f"{today}_report_{i:03d}{file.suffix}"
file.rename(file.parent / new_name)このスクリプトは、指定フォルダ内のPDFファイルを日付付きの連番にリネームします。月次レポートの整理などに活用できます。
Excel操作の自動化(openpyxl)
Excelファイルの処理は、多くのオフィスワーカーにとって日常業務の大きな割合を占めます。openpyxlライブラリを使えば、Excelを開くことなくPythonからデータの読み書きが可能です。
複数のExcelファイルを一つに統合する
Python
from pathlib import Path
import openpyxl
merged = openpyxl.Workbook()
sheet = merged.active
sheet.title = "統合データ"
header_written = False
for file in Path("./monthly_data").glob("*.xlsx"):
wb = openpyxl.load_workbook(file)
ws = wb.active
for i, row in enumerate(ws.iter_rows(values_only=True)):
if i == 0 and header_written:
continue # ヘッダー行は最初の1回だけ
sheet.append(row)
header_written = True
merged.save("統合レポート.xlsx")
print(f"{len(list(Path('./monthly_data').glob('*.xlsx')))}件のファイルを統合しました")毎月届く売上レポートや勤怠データなど、同じフォーマットの複数ファイルを一つにまとめる場面で重宝します。手作業でコピー&ペーストを繰り返す必要がなくなります。
セルの値を条件付きで更新する
Python
import openpyxl
wb = openpyxl.load_workbook("sales.xlsx")
ws = wb.active
for row in ws.iter_rows(min_row=2): # ヘッダーを除外
sales_value = row[2].value # C列: 売上金額
if sales_value and sales_value >= 1000000:
row[3].value = "A" # D列にランクを記入
elif sales_value and sales_value >= 500000:
row[3].value = "B"
else:
row[3].value = "C"
wb.save("sales_ranked.xlsx")VBAマクロで書いていた処理をPythonに置き換えることで、バージョン管理やテストが容易になります。VBAからPythonへの移行を検討している方は、Excel VBAからPythonへの移行も参考にしてください。
メール送信の自動化(smtplib)
定型メールの送信もPythonで自動化できます。標準ライブラリのsmtplibとemailモジュールを組み合わせることで、宛先リストに基づいた一斉送信が実現します。
Python
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_email(to_address: str, subject: str, body: str):
msg = MIMEMultipart()
msg["From"] = "your_address@example.com"
msg["To"] = to_address
msg["Subject"] = subject
msg.attach(MIMEText(body, "plain", "utf-8"))
with smtplib.SMTP("smtp.example.com", 587) as server:
server.starttls()
server.login("your_address@example.com", "your_password")
server.send_message(msg)
# 宛先リストに基づいて送信
recipients = [
{"email": "tanaka@example.com", "name": "田中"},
{"email": "suzuki@example.com", "name": "鈴木"},
]
for r in recipients:
send_email(
r["email"],
"月次レポートのご送付",
f"{r['name']}様\n\nお疲れ様です。月次レポートをお送りいたします。"
)
print(f"{r['name']}さんへ送信完了")実運用では、パスワードを環境変数で管理し、送信間隔を空けるなどの配慮が必要です。また、大量送信の場合はSendGridなどの外部サービスの利用も検討してください。
Webブラウザ操作の自動化(Selenium / Playwright)
社内システムへのデータ入力や、Webサイトからの定期的な情報取得など、ブラウザ操作の自動化も強力な業務効率化手段です。
Playwrightによるブラウザ操作
Playwrightは、Microsoftが開発したブラウザ自動化ツールで、Seleniumよりもセットアップが簡単で動作も安定しています。
Python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # ブラウザを表示
page = browser.new_page()
# ログイン処理
page.goto("https://example.com/login")
page.fill("#username", "your_username")
page.fill("#password", "your_password")
page.click("button[type='submit']")
# ページ遷移を待機してからデータを取得
page.wait_for_selector(".dashboard")
data = page.text_content(".sales-total")
print(f"本日の売上合計: {data}")
# スクリーンショットを保存
page.screenshot(path="dashboard.png")
browser.close()Webスクレイピングの基礎から学びたい方は、Pythonでスクレイピング入門の記事で詳しく解説しています。
Seleniumによるフォーム入力の自動化
Python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com/form")
wait = WebDriverWait(driver, 10)
input_field = wait.until(EC.presence_of_element_located((By.ID, "report-date")))
input_field.send_keys("2026-03-18")
driver.find_element(By.ID, "submit-btn").click()
print("フォーム送信が完了しました")
driver.quit()Seleniumは長い歴史を持ち、情報量が豊富な点が強みです。新規プロジェクトではPlaywrightを、既存のSeleniumコードがある環境ではそのまま活用するのが現実的です。
自動化を始めるためのポイント
小さく始める
最初から複雑なスクリプトを書こうとせず、「毎日10分かかっている作業」を一つ選んで自動化してみましょう。成功体験を積むことで、自動化の範囲を徐々に広げていけます。
エラーハンドリングを忘れない
自動化スクリプトは無人で動くことが多いため、エラーが発生した場合の処理を必ず組み込みましょう。try-exceptでエラーをキャッチし、ログファイルに記録する習慣をつけると安心です。
Python
import logging
logging.basicConfig(filename="automation.log", level=logging.INFO)
try:
# 自動化処理
pass
except Exception as e:
logging.error(f"エラーが発生しました: {e}")定期実行の仕組みを整える
作成したスクリプトは、OSのタスクスケジューラ(Windows)やcron(Mac/Linux)を使って定期実行すると、完全な自動化が実現します。
自動化できる業務カテゴリ 5 選
何から始めるか迷ったら、次の領域から。
1. ファイル操作 大量ファイルのリネーム、CSV → Excel 変換、フォルダ整理、PDF 結合 / 分割。
2. Excel / スプレッドシート処理 集計、データクレンジング、ピボット、グラフ生成、レポート出力。
3. Web スクレイピング 競合価格監視、ニュース収集、SNS 投稿取得、商品情報収集。
4. メール / 通知 定期レポートのメール送信、Slack / LINE 通知、緊急アラート。
5. ブラウザ操作 定型的なフォーム入力、画面キャプチャ、ログイン後の操作自動化 (Selenium / Playwright)。
実用レシピ 7 選
そのまま改変して使えるパターン。
Python
# 1. フォルダ内の全 Excel を 1 つに結合
import pandas as pd
from pathlib import Path
dfs = [pd.read_excel(f) for f in Path("data/").glob("*.xlsx")]
combined = pd.concat(dfs)
combined.to_excel("combined.xlsx", index=False)
# 2. 毎日決まった時刻にレポートを Slack に送信
import requests
WEBHOOK = "https://hooks.slack.com/services/..."
requests.post(WEBHOOK, json={"text": f"本日の売上: {total}円"})
# 3. Web ページを定期スクレイピング
import requests
from bs4 import BeautifulSoup
res = requests.get("https://example.com/news")
soup = BeautifulSoup(res.text, "html.parser")
titles = [a.text for a in soup.select("h2.title")]
# 4. 大量メール送信
import smtplib
from email.mime.text import MIMEText
for to in recipients:
msg = MIMEText("本文")
msg["Subject"] = "件名"
msg["From"] = "from@example.com"
msg["To"] = to
# smtplib で送信
# 5. PDF を結合
from PyPDF2 import PdfMerger
merger = PdfMerger()
for pdf in Path("pdfs/").glob("*.pdf"):
merger.append(str(pdf))
merger.write("merged.pdf")
# 6. ブラウザ自動操作 (Selenium)
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com/login")
driver.find_element("name", "user").send_keys("user@example.com")
# 7. 定期実行 (cron / Windows Task Scheduler)
# 上記スクリプトを cron 登録するだけで毎日自動実行関連リソース
- Python とは
- Excel VBA から Python への移行ガイド
- Pythonでスクレイピング入門
- Pythonで始めるデータ分析入門
- Google Apps Script で業務自動化
- Python 入門コース
よくある質問
Q. Python 自動化の学習コストは
A. Python 基本 + 主要ライブラリ (pandas / openpyxl / requests) で 2-4 週間。1 つのスクリプトを作るには 1 日あれば十分。投資回収期間は 1-2 ヶ月以内が一般的です。
Q. 業務自動化で違法 / 規約違反になりませんか
A. スクレイピングは対象サイトの利用規約 + robots.txt を必ず確認します。会社のメール / ファイルを扱う場合は、社内ポリシーと情シスに事前確認してください。詳しくは Web スクレイピング入門 で注意点を整理しています。
Q. 自動化スクリプトはどこで動かすべきですか
A. 個人用なら自分の PC + cron / タスクスケジューラ。組織で使うなら Cloud Functions / Cloud Run / AWS Lambda などのサーバーレス。常駐サーバー不要で安価に運用できます。
Q. VBA から Python に移行する価値は
A. 大きくあります。実行速度・ライブラリ・拡張性・チーム共有のすべてで Python が優位。詳しくは Excel VBA から Python への移行ガイド を参照してください。
Q. AI と組み合わせた自動化はできますか
A. はい、ChatGPT API / Claude API を呼び出して「AI が判断 → Python が実行」の高度自動化が可能です。問い合わせ振り分け、文書要約、レポート生成、画像分析など、応用範囲は無限です。
Q. GAS と Python、業務自動化ではどちらが向いていますか
A. Google Workspace 中心の業務なら GAS、それ以外なら Python。詳しくは GAS で業務自動化 を参照してください。
ハンズオン Step-by-Step
Python 3.10 以上が入った環境で、Excel ファイル (sample.xlsx) を 1 つ用意して「読む → 列を加工 → 別名で保存」を試します。
Step 1. 依存ライブラリをインストール
openpyxl は Excel ファイル操作に使います。pip か python -m pip で入れてください。
ターミナル
pip install openpyxlStep 2. Excel ファイルを読み込む
sample.xlsx の最初のシートをすべて表示します。
Python
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
ws = wb.active
for row in ws.iter_rows(values_only=True):
print(row)Step 3. 列を加工して別名で保存
B 列 (数値) を 1.1 倍した値を C 列に書き出して、別名で保存します。
Python
for row in ws.iter_rows(min_row=2):
val = row[1].value or 0
row[2].value = val * 1.1
wb.save("sample_out.xlsx")Step 4. 実行して結果を確認
python automate.py を実行し、sample_out.xlsx を開いて C 列に計算結果が入っていれば成功です。
ターミナル
python automate.pyStep 5. スケジュール実行に拡張
macOS なら crontab -e、Windows ならタスクスケジューラに登録すれば、毎朝 9 時に自動実行できます。
業務自動化の入り口はここで終わりです。次は Web スクレイピング入門 で外部データ取得に進みましょう。
まとめ
Pythonによる業務自動化は、特別な知識がなくても始められます。ファイル操作なら標準ライブラリだけで十分ですし、Excel処理やWeb操作も数行のコードで実現可能です。まずは自分の業務の中で「繰り返しているな」と感じる作業を一つ見つけて、自動化に挑戦してみてください。
自動化スクリプトを書くためには、Pythonの基礎文法の理解が欠かせません。変数、条件分岐、ループ、関数といった基本を体系的に学びたい方は、チョットデキルのPython基礎コースで、ブラウザ上ですぐにコードを書きながら学習を進められます。基礎を固めた上で自動化に取り組むことで、より効率的にスクリプトを書けるようになります。
次に読むべきリソース
- 学習を始めたい方 — Python 入門コース
- 深く理解したい方 — Python でできること
- 無料相談したい方 — LuaGate 無料相談
出典・参考リンク
本記事の主張・数値・仕様に関する根拠は、以下の一次情報・公式ドキュメントを参照しています。リンク先の更新により内容が変わる場合があるため、最新情報は各公式サイトで確認してください。
- Python 公式ドキュメント
- openpyxl 公式ドキュメント
- pandas 公式ドキュメント
- Selenium 公式ドキュメント
- schedule (Python パッケージ)
- Microsoft Learn (Office VBA / Office Scripts)
この記事について
- 監修: 生田 陸人 (LuaGate エンジニア / 大手 IT 企業現役エンジニア)
- 公開: 2026-05-28
- 最終更新: 2026-05-28
- カテゴリ: 業務自動化
- 検証環境: Python 3.12 / openpyxl 3.x / pandas 2.x / Selenium 4.x
- 編集ポリシー: 公式ドキュメント・公的統計を一次情報として優先し、社内エンジニアが実機検証した内容のみを掲載しています。修正提案や事実誤認の指摘は チョットデキル運営 までお寄せください。