データ入力作業をPythonで自動化する入門ガイド【コピペOK】
「Excelに毎日同じデータを手入力している」「別システムからコピペして転記するだけの作業に2時間かかっている」——この手の作業をPythonで自動化した話をよく相談で聞きます。
自分もエンジニア副業の初期に、クライアントのこういう作業を引き受けることが多かった。Python書けると「そんな作業、数十行のスクリプトで終わります」と言えるので、かなり重宝される。この記事では、データ入力・転記系の自動化でよく使うコードをそのまま使えるサンプル付きで紹介します。
準備:必要なライブラリのインストール
まずPythonとライブラリをインストールします。Pythonが入っていない場合は公式サイトから3.11以降をダウンロード。
pip install openpyxl pandas requests beautifulsoup4
- openpyxl — Excelファイルの読み書き
- pandas — CSV・テーブルデータの操作
- requests + beautifulsoup4 — Webスクレイピング
パターン1: ExcelファイルをCSVに一括変換
複数のExcelファイルをCSVに変換する作業、手動でやると地味に時間がかかります。
import os
import pandas as pd
# 変換したいExcelファイルがあるフォルダを指定
input_folder = "excel_files"
output_folder = "csv_output"
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(input_folder):
if filename.endswith(".xlsx") or filename.endswith(".xls"):
filepath = os.path.join(input_folder, filename)
df = pd.read_excel(filepath)
csv_name = filename.rsplit(".", 1)[0] + ".csv"
csv_path = os.path.join(output_folder, csv_name)
df.to_csv(csv_path, index=False, encoding="utf-8-sig")
print(f"変換完了: {filename} → {csv_name}")
print("すべてのファイルを変換しました")
input_folder のパスを変えれば使いまわせます。encoding="utf-8-sig" を指定しているのは、Excelで開いたときに文字化けしないようにするため。
パターン2: 複数CSVを1つにまとめる
月別の売上データや顧客データが別々のCSVに分かれていて、毎月まとめるのが面倒——このケースです。
import os
import pandas as pd
csv_folder = "monthly_data"
output_file = "all_data_combined.csv"
dfs = []
for filename in os.listdir(csv_folder):
if filename.endswith(".csv"):
filepath = os.path.join(csv_folder, filename)
df = pd.read_csv(filepath, encoding="utf-8-sig")
df["source_file"] = filename # どのファイルから来たかを記録
dfs.append(df)
if dfs:
combined = pd.concat(dfs, ignore_index=True)
combined.to_csv(output_file, index=False, encoding="utf-8-sig")
print(f"{len(dfs)}件のCSVを結合しました → {output_file}")
else:
print("CSVファイルが見つかりません")
source_file 列を追加しているので、後から「このデータはどのファイルから来た?」を追跡できます。
パターン3: ExcelのデータをWeb API経由で別システムに送る
社内システムやkintone・Notionに手入力していたデータを、ExcelからAPIで自動登録するパターンです。
import pandas as pd
import requests
import json
# Excelからデータ読み込み
df = pd.read_excel("input_data.xlsx")
# APIのエンドポイントとトークン(実際の値に変更)
API_URL = "https://your-system.example.com/api/records"
API_TOKEN = "your-api-token-here"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_TOKEN}"
}
success_count = 0
for _, row in df.iterrows():
payload = {
"name": row["氏名"],
"email": row["メールアドレス"],
"amount": int(row["金額"]),
}
response = requests.post(API_URL, headers=headers, data=json.dumps(payload))
if response.status_code == 200:
success_count += 1
else:
print(f"エラー: {row['氏名']} — {response.status_code}")
print(f"登録完了: {success_count}/{len(df)}件")
列名(氏名、メールアドレス、金額)はExcelの実際のヘッダー名に合わせて変更してください。
パターン4: Webサイトのデータを自動収集
定期的に競合サイトの価格や、特定ページの情報を手動でコピペしているなら、スクレイピングで自動化できます。
import requests
from bs4 import BeautifulSoup
import csv
url = "https://example.com/products" # 取得したいページのURL
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"})
soup = BeautifulSoup(response.text, "html.parser")
# 例: 商品名と価格を取得(セレクタはサイトに合わせて変更)
products = soup.find_all("div", class_="product-item")
with open("products.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["商品名", "価格"])
for product in products:
name = product.find("h3").text.strip()
price = product.find("span", class_="price").text.strip()
writer.writerow([name, price])
print(f"{len(products)}件のデータを取得しました")
スクレイピングは利用規約を確認してから実行してください。robots.txt で禁止されているサイトへの使用は避けること。
スクリプトを定期実行するには
作ったスクリプトをWindowsのタスクスケジューラやMacのlaunchdで毎日自動実行すれば、完全な無人運転になります。Windowsの場合:
- タスクスケジューラを起動
- 「タスクの作成」→ トリガーで実行タイミングを設定
- 操作で
python C:\path\to\your_script.pyを指定
毎朝9時に自動実行して結果をCSVに書き出す、という運用が多いです。
ここで紹介したのは基本パターンですが、実際の業務では「エラー時にSlackに通知を飛ばす」「処理済みファイルを別フォルダに移動する」など、もう少し手を加えることが多い。「自分の業務に合わせたスクリプトを作りたい」という場合は、Coconalaの業務自動化サービス経由でご相談いただけます。
GASを使った自動化(Googleスプレッドシート中心)はこちらの記事、月10時間削減した請求書自動化の事例はこちらも参考に。