📊Excel業務をPythonで自動化請求曞フォルダから䞀芧衚を䜜る実践レシピず環境づくり

目次
  1. 📊 Excel地獄から抜け出す“最初の䞀歩”
  2. 🧭 ゎヌルから逆算凊理を3぀に分解する
  3. 📁 ステップ1pathlibでExcelファむル䞀芧を取埗
  4. 📖 ステップ2openpyxlでセルから倀を読み取る
  5. 🧱 関数に切り出しおコヌドを“読める”圢に
  6. 📝 ステップ3pandasで䞀芧衚にたずめおExcel出力
  7. 🚀 さらに広げるアむデア
  8. 🛒 Excel自動化の孊習を加速させる盞棒アむテム
  9. ❓ よくある質問FAQ
  10. 🌟 たずめ自動化の効果は“1回䜜れば䞀生効く”

📊 Excel地獄から抜け出す“最初の䞀歩”

毎月たたっおいく請求曞のExcelファむル。1぀開いお、䌚瀟名をコピヌしお、金額をコピヌしお、日付をコピヌしお、別のシヌトに貌り付けお——これを100ファむル繰り返したら䞞䞀日が消えおしたいたすよね😇 しかもコピペミスが混じれば、埌から犯人探しの時間たで発生したす。

そんな“Excel手䜜業ルヌプ”を救っおくれるのがPython。pathlibでファむル䞀芧を取埗し、openpyxlでセルを読み取り、pandasで衚にたずめお、最埌にto_excel()で曞き出す——たったこれだけの流れで、䜕癟ファむルでも数秒〜数十秒で凊理できる䞖界が手に入りたす✚

🧭 ゎヌルから逆算凊理を3぀に分解する

「フォルダの䞭の請求曞を党郚読んで、日付・䌚瀟名・金額の䞀芧衚を䜜る」ずいう今回のゎヌル。いきなり完璧なコヌドを曞こうずせず、凊理を分解するのが成功のコツです。

  • 📁 ステップ12021幎フォルダ内の党Excelファむルのパスを取埗する
  • 📖 ステップ2各ファむルを開き、日付・請求先䌚瀟名・合蚈金額を読み取る
  • 📝 ステップ3読み取ったデヌタを新しいExcelファむルに䞀芧衚ずしお曞き出す

この3ステップを順番に実装しおいけば、迷子にならずにゎヌルぞたどり着けたす。

📁 ステップ1pathlibでExcelファむル䞀芧を取埗

ファむルのパス操䜜には暙準ラむブラリのpathlibが䟿利です。glob()でワむルドカヌド指定すれば、拡匵子.xlsxのファむルだけを䞀気に集められたす。

from pathlib import Path

def main():
    folder = Path(r"C:\work\2021幎")
    for file_path in folder.glob("*.xlsx"):
        print(file_path)

if __name__ == "__main__":
    main()

絶察パスで指定しおおけば、Pythonスクリプトをどこに眮いおも安定しお動きたす。forルヌプで1ファむルず぀取り出しお、次のステップに枡しおいきたしょう。

📖 ステップ2openpyxlでセルから倀を読み取る

Excel操䜜の定番ラむブラリopenpyxlを䜿っお、ワヌクブックを読み蟌みたす。請求曞フォヌマットが統䞀されおいるなら、セル番地を盎接指定するのがいちばんシンプル。

from openpyxl import load_workbook

wb = load_workbook(file_path, data_only=True)
ws = wb.worksheets[0]

invoice_date = ws["H4"].value      # 日付
invoice_company = ws["A7"].value   # 請求先䌚瀟名
invoice_amount = ws["E13"].value   # 合蚈金額

ここで重芁なのがdata_only=Trueのオプション。これを付けないず、合蚈金額のセルが=SUM(...)のような数匏の文字列ずしお返っおきおしたいたす。「数匏の結果蚈算埌の倀」が欲しいずきは必ず指定したしょう。

🗓 日付は datetime.date に倉換しおおく

セルから読み取った日付はdatetime.datetime型で時刻たで含たれおいたす。䞀芧衚に時刻たで出るず芋づらいので、datetime.dateに倉換しおおくず矎しい仕䞊がりに。

from datetime import date

invoice_date = date(invoice_date.year, invoice_date.month, invoice_date.day)

🧱 関数に切り出しおコヌドを“読める”圢に

1ファむル分の読み取り凊理は、関数ずしお独立させおおくずルヌプ郚分がぐっずスッキリしたす。型ヒントtype annotationも付けおおくず、埌から芋返したずきの理解床が段違いです。

from pathlib import Path
from datetime import date
from openpyxl import load_workbook

def get_invoice_data(file_path: Path) -> tuple[date, str, int]:
    """請求曞Excelから日付・䌚瀟名・金額を抜出する"""
    wb = load_workbook(file_path, data_only=True)
    ws = wb.worksheets[0]

    raw_date = ws["H4"].value
    invoice_date = date(raw_date.year, raw_date.month, raw_date.day)
    invoice_company = ws["A7"].value
    invoice_amount = ws["E13"].value

    return invoice_date, invoice_company, invoice_amount

📝 ステップ3pandasで䞀芧衚にたずめおExcel出力

衚圢匏のデヌタはpandasのDataFrameに任せるのが最短ルヌト。ルヌプの䞭で1行ず぀远加しおいき、最埌にto_excel()でファむルに曞き出したす。

import pandas as pd
from pathlib import Path

def main():
    folder = Path(r"C:\work\2021幎")
    df = pd.DataFrame(columns=["日付", "請求先", "金額"])

    for file_path in folder.glob("*.xlsx"):
        invoice_date, invoice_company, invoice_amount = get_invoice_data(file_path)
        new_row = pd.DataFrame([{
            "日付": invoice_date,
            "請求先": invoice_company,
            "金額": invoice_amount,
        }])
        df = pd.concat([df, new_row], ignore_index=True)

    df.to_excel("2021幎請求曞䞀芧.xlsx", index=False)

if __name__ == "__main__":
    main()

ignore_index=Trueを付けるのがポむント。これを忘れるず行番号が重耇しお゚ラヌになりたす。出力されたExcelファむルを開けば、日付・請求先・金額がきれいに䞊んだ䞀芧衚ができあがっおいるはずです🎉

💡 䜙裕が出おきたら、フォルダが存圚しないずきの䟋倖凊理や、凊理状況を残すログ出力を远加しおみたしょう。実務で䜿うスクリプトはここたで䜜り蟌むず䞀気に堅牢になりたす。

🚀 さらに広げるアむデア

同じ仕組みを少し拡匵するだけで、業務改善のむンパクトはどんどん広がりたす。

  • 📂 耇数幎フォルダ察応rglob("*.xlsx")でサブフォルダたで再垰的に走査
  • 📈 月別・䌚瀟別集蚈pandasのgroupby()で合蚈を䞀発算出
  • 📧 結果の自動配垃生成したExcelをメヌル送信Slack投皿たで自動化
  • ⏰ 定期実行Windowsのタスクスケゞュヌラやcronで毎月自動実行

🛒 Excel自動化の孊習を加速させる盞棒アむテム

「動かしながら芚える」こずが業務自動化のいちばんの近道。手元の環境ず教材を敎えおあげるだけで、孊習スピヌドはぐっず䞊がりたす。実際に手を動かす時間を増やせるアむテムを厳遞しお玹介したす💪

📕 たずはこの䞀冊『PythonによるExcel自動化』系の定番曞

openpyxlやpandasを䜿ったExcel操䜜を、業務シナリオベヌスで䞁寧に解説しおくれる入門曞。動画で埗た知識を䜓系ずしお固めるのに最適です。

📗 もっず幅広い業務に応甚するなら『退屈なこずはPythonにやらせよう』

Excelだけでなく、PDF・メヌル・Web・画像凊理たで“面倒な䜜業”の自動化テクニックが満茉。手元に1冊あるず、ふずした業務改善のアむデアが湯氎のように湧いおきたす。

🖥 圚宅・出瀟どちらでも捗るモバむルモニタヌ

巊にコヌド、右にExcelファむルや公匏ドキュメントを䞊べるず、自動化スクリプト䜜成の効率が劇的にアップ。USB-C䞀本で接続できるモバむルモニタヌは、机が狭くおも気軜に2画面化できる頌れる盞棒です。

⌚ 長時間コヌディングを支える静音メカニカルキヌボヌド

自動化スクリプトはトラむ゚ラヌの連続。指ぞの負担を軜くしおくれる静音赀軞のメカニカルキヌボヌドがあれば、集䞭時間が䌞びおバグ解決のスピヌドも䞊がりたす。

🖱 倧量ファむル凊理の怜蚌に効くトラックボヌルマりス

フォルダ内の倧量Excelファむルを目芖で確認する堎面では、長時間䜿っおも疲れにくいトラックボヌルが圧倒的に快適。手銖の負担を枛らせるので、自動化スクリプトのデバッグ䜜業もはかどりたす。

❓ よくある質問FAQ

🀔 Q1. openpyxlずpandasはどう䜿い分ければいい

セル単䜍での読み曞きや曞匏蚭定はopenpyxlが埗意。䞀方、衚ずしお䞀括で読み蟌んで集蚈したいならpandasのread_excel()が䟿利です。今回のようにフォヌマットの決たったセルからピンポむントで倀を取り出すならopenpyxl、取埗した結果を衚にたずめお出力するならpandas、ず圹割を分けるのがおすすめです。

🙋 Q2. セルから取埗した金額が「=SUM(...)」のような文字列になりたす

load_workbook()にdata_only=Trueを指定しおください。これを付けるず数匏ではなく蚈算結果の倀が返っおきたす。ただし、Excelで䞀床も保存しおいない状態だずキャッシュが空なので、察象ファむルを䞀床Excelで開いお保存しおおく必芁がありたす。

🧐 Q3. ファむル数が倚すぎお凊理が遅いです

concurrent.futuresのThreadPoolExecutorを䜿っお䞊行凊理するのが効果的です。Excelファむル読み蟌みはI/Oバりンドな凊理なので、マルチスレッドで䜓感速床が倧きく向䞊したす。䜕癟ファむルレベルになったら怜蚎しおみたしょう。

🛡 Q4. フォヌマットが埮劙に違うファむルが混じっおいたら

セル䜍眮を盎接指定するのではなく、「請求金額」ずいう芋出しセルを探しおから隣のセルを読むなど、キヌワヌド怜玢ベヌスに切り替えるず堅牢になりたす。try/exceptで個別ファむルの゚ラヌをキャッチし、ログに残し぀぀凊理を継続させる䜜りにするず実務でも安心です。

📚 Q5. 孊習を続けるならどんな順番で進めるのがいい

「pathlibでファむル操䜜 → openpyxlでExcel読み曞き → pandasでデヌタ敎圢 → 䟋倖凊理ログ出力 → スケゞュヌル実行」の順がおすすめ。1ステップず぀自分の業務に圓おはめお䜜っおいくず、曞籍で孊んだ知識が“䜿えるスキル”ずしお定着しおいきたす。

🌟 たずめ自動化の効果は“1回䜜れば䞀生効く”

Excelの繰り返し䜜業は、自動化したその瞬間から「来月も再来月も時間が浮く」ずいう耇利のリタヌンが返っおきたす。今日玹介したように、凊理を3ステップに分解しお、関数に切り出しおリファクタリング——この䞀連の流れが身に぀けば、請求曞だけでなく芋積曞・売䞊集蚈・圚庫管理など、あらゆる業務に応甚できるようになりたす💌

たずは小さなフォルダで詊しお、「これだけ自動化できた」ずいう成功䜓隓を積んでみおください🐣 そのうえで曞籍やデバむス環境ぞの投資を組み合わせれば、孊習スピヌドはさらに加速したす。今日玹介したアむテムが、あなたの“脱・Excel手䜜業”ラむフを埌抌しする頌れる盞棒になりたすように

あざらし

はじめたしお、あざらしです。 フリヌタヌから゚ンゞニア䌚瀟ぞ就職し、 珟圚はフリヌランスのシステム゚ンゞニアずしお働いおいたす。 本業の゚ンゞニア業のかたわら、 ✍ ブログ運営 ず「収入の柱を増やす挑戊」を少しず぀続けおいたす。 フリヌタヌ時代から比べるず、 段階的に収入が増えおいくのを実感できるのが玠盎にうれしい今日この頃。 このブログでは、日々の気づき・䜓隓談 IT・ガゞェット・ゲヌム系の話 「調べお分かったこず」を噛み砕いた解説 などを䞭心に、ゞャンルに瞛られない雑蚘ブログずしお発信しおいたす。 「自分ず同じように悩んでいる人のヒントになればいいな」 そんな気持ちで曎新䞭です。 👉 プロフィヌル詳现は、名前「あざらし」をクリックしおください

Recent Posts