毎月60社分の請求書をExcelで1件ずつ作っていた経理担当者が、PythonとopenpyxlでPDF一括出力できるようにした話

アナログ経理、月末の重圧

従業員10名規模の小さな会社での出来事です。会社は小さくても、経理業務の重圧は決して軽くはありませんでした。特に月末が近づくと、大きな負担がのしかかってきます。それは、取引先60社分の請求書を発行する作業があるからです。この重い作業が、毎月必ず待っていました。

作業内容は、非常にアナログなものでした。まずは、ひたすらExcelのファイルを開くことから始まります。そして、単価や数量を一つずつ手作業で打ち込んでいきました。この単純な作業を繰り返す時間が、延々と続いていくのです。

社名誤記、深夜の孤独作業

それは、ある月末の夕方のことでした。私は、いつものように作業をしていました。取引先60社分のExcelファイルを開いては閉じます。さらに、PDFに変換して保存する作業をひたすら繰り返していました。そんな時、あるミスに気づいたのです。

「株式会社A」の請求書を確認した時のことです。なんと、社名が「株式会社B」のままになっていました。その事実に気づいた瞬間、冷や汗が吹き出しました。これまでの50件すべてに誤りがないか、不安になったからです。結局、全てを1から見直すことになってしまいました。

その日は、ついに終電に間に合いませんでした。誰もいないオフィスで、深夜2時まで作業を続けました。静まり返った部屋で、一人で数字を確認し続けました。あの時の孤独感と疲労は、今でも忘れることができません。



請求書自動化:劇的時短と心の安心

手作業での請求書作成には、膨大な時間がかかっていました。60社分の作業で、月末の3日間で延べ12時間ほどです。これだけの時間を、毎月費やし続けていました。しかし、自動化を導入した後は劇的に変わりました。

同じ60社分の処理が、約20分で完結するようになったのです。作業時間は、以前の数十分の一になりました。これほどの差が出るとは、正直なところ驚いています。時間を有効に使えるようになり、心に余裕が生まれました。

疲れ果てた経理担当者が机に突っ伏しており、モニターには「請求書」と書かれたExcelのウィンドウが無数に開いている。取引先名の入力欄が中途半端に埋まっている。薄暗いオフィス。realistic photo style。日本語テキストを含む画面

作業自体は、単純なコピーアンドペーストの連続にすぎません。しかし、常にミスへの恐怖が付きまとっていました。金額の入力ミスは、会社の信用に関わります。また、別の取引先のデータを上書きしてしまう心配もありました。こうした不安が、精神を削っていったのです。

結果として、月末の3日間は通常業務が止まっていました。ひたすら数字の確認に追われる日々です。この期間は、まさに地獄のような状態と化していました。こうした状況は、多くの経理担当者が経験しているはずです。

月末手作業の負のスパイラル

月末の貴重な3日間を、丸ごと奪われてしまいます。「来月こそは早く終わらせよう」と、いつも思っていました。しかし、結局は同じことを繰り返してしまいます。手作業である限り、根本的なリスクはなくなりません。どれだけ慣れても、ミスをゼロにすることは難しいと感じていました。

Excelテンプレート乱立と個別対応の複雑化

そもそも、なぜ作業がこれほど複雑だったのでしょうか。その原因は、Excelテンプレートの乱立にありました。取引先ごとに用意された、個別のファイルが問題でした。これらを管理するだけでも、多大な労力が必要だったのです。

複数のExcelタブに「取引先A」「取引先B」「取引先C」と名前がついており、備考欄の「前月金額が残ったまま」のセルが赤くハイライトされている。シートによってレイアウトが不揃い。realistic spreadsheet screenshot style。日本語テキストを含む画面

取引先ごとに、求められる要件が異なります。例えば、取引先Aは消費税別の表記を希望されます。一方、取引先Bは消費税込みの金額での請求を希望していました。さらに、取引先Cには独自のルールが存在していました。振込手数料を先方負担にするため、金額を差し引く必要があるのです。

要件が違うため、異なるレイアウトのファイルを使わざるを得ません。毎月、これらのファイルを使い回していました。ファイルをコピーして新しいシートに貼り付ける作業も大変です。セルの幅が狂ったり、印刷範囲がズレたりすることもありました。細かな修正作業が、さらに時間を奪っていきました。

手作業ミスの恐怖、プログラミングで脱却へ

前月のファイルをコピーして作成した時の話です。一番下の備考欄に、前月の内容が残っていました。「特別値引き」の金額を、消し忘れてしまったのです。そのままPDF化して、取引先に送信してしまいました。後日、先方の担当者から連絡がありました。

「今月も値引き対象なのですか」という電話でした。その言葉を聞いた瞬間、胃が握りつぶされる思いでした。すぐに平謝りをして、修正版を急いで再送しました。この苦い経験は、今でもトラウマとして残っています。手作業での運用を続けている限り、こうしたミスは防げません。

ヒヤリハットがなくなる日は、永遠に来ないと感じました。限界を感じた私は、プログラミングを学ぶ決意をしました。根本から仕組みを変えなければならないと思ったのです。手作業の地獄から抜け出すための、大きな一歩を踏み出しました。

Python初心者からの業務改善記

当時の私は、Pythonについて全くの初心者でした。Excelマクロについても、知識はほとんどありませんでした。それでも、「このまま消耗し続けたくない」という思いが強かったです。その焦りが、私の背中を強く押してくれたのです。

調べながら、少しずつコードを書き始めました。エラーと格闘する日々でしたが、一歩ずつ前に進みました。この記事は、その奮闘の記録をまとめたものです。同じように業務で疲弊している方の、参考になれば幸いです。まずは、openpyxlをインストールすることから始めてみてください。

VBA・Pythonをもっと本格的に学ぶなら

VBAやPythonを実務レベルまで引き上げたい方には「侍エンジニア」がおすすめです。マンツーマン指導・オーダーメイドカリキュラムで、文系出身でも挫折しにくい環境が整っています。無料カウンセリングだけでも学習ロードマップが明確になります。

侍エンジニア 無料カウンセリングを予約する →

PythonによるExcelテンプレート自動化

最初に手をつけるべきは、属人的な操作の排除でした。テンプレートを一つずつ手でいじるのをやめることです。そこで、Pythonのライブラリであるopenpyxlを活用しました。これを使えば、Excelを直接開かずにデータを書き込めます。

Pythonのコードエディタにopenpyxlのload_workbookやws['B3'].valueという記述があり、日本語のコメントが添えられている。背後にはターミナル画面で「60件処理完了」の文字。realistic screenshot style

構築した仕組みは、非常にシンプルなものです。まず、変動するデータは一つのCSVファイルで管理します。社名や請求金額、振込先などのデータです。Pythonのスクリプトが、このCSVを1行ずつ読み込みます。そして、openpyxlでひな型ファイルを開くのです。

あとは、指定したセルにデータを流し込むだけです。例えば、社名は「B3」のセルに書き込むよう指示します。これを、全取引先分繰り返すだけの処理です。しかし、非エンジニアが必ず躓くポイントがあります。それは「セルの結合」という厄介な仕様です。

結合セル書き込みの苦労と自動化への一歩

見た目を良くするために、セルを結合している場合があります。この状態だと、プログラムからの書き込みが難しくなります。結合された領域の、左上のセル番地を指定しなければなりません。この罠にハマり、最初は多くの時間を費やしました。

エラーメッセージと睨み合う時間が、長く続きました。ここで使ったload_workbookは、非常に基本的な関数です。自分で試してみると、セルへの書き込みは意外と簡単です。一行のコードで完結するほど、シンプルな操作でした。

最初はコードの書き方に慣れるまで、時間がかかりました。しかし、試行錯誤を繰り返して1週間ほどで習得しました。基本の流れをつかめば、あとは応用するだけです。このステップを越えたことで、自動化への自信が深まりました。

PDF自動生成とファイル整理

データの流し込みに成功した後、次の課題が現れました。openpyxlには、PDFとして保存する機能がないのです。PDF化するには、Excel本体の機能を使う必要があります。そこで、win32comというライブラリを使用することにしました。

win32comのExportAsFixedFormatが記述されたコードエディタと、Windowsのエクスプローラー上で「取引先A」「取引先B」というフォルダにそれぞれ「2026年04月_請求書.pdf」が保存されている様子。realistic screenshot style。日本語テキストを含む画面

このライブラリを使えば、Excelを操作できます。命令を出すと、裏側でExcelが密かに起動するのです。そのまま流し込み済みのファイルを開かせます。そして、指定の形式でPDFを書き出させるのです。これで、PDFの自動生成ができるようになりました。

最初は、全てのPDFを一つのフォルダに出していました。しかし、それではファイルが散乱してしまいます。過去のものと混ざり、最新のファイルが分からなくなりました。そこで、取引先ごとのフォルダを自動で作るようにしました。ファイル名には、請求年月を付与するルールを設けています。

自動整理の感動

実行ボタンを押すと、綺麗なツリー構造が出来上がります。フォルダとファイルが、自動で整理されていく様子は圧巻でした。その瞬間、あまりの快感にガッツポーズをしてしまいました。これまでの苦労が報われた瞬間でした。

取引先ごとにフォルダが作られ、中身も整理されています。これを見た時、大きな安堵感が込み上げてきました。もう月末に終電を逃す心配はありません。毎月、スクリプトを実行するだけで完了します。コーヒーを飲んでいる間に、全ての作業が終わるのです。

自動化の落とし穴:請求日計算ミスの教訓

自動化の完成に喜んでいましたが、思わぬトラブルが起きました。本格的な運用を始めて、すぐのことでした。プログラムのミスにより、重大な事故が発生したのです。それは、請求日の計算に関する問題でした。

ターミナルに「警告:請求日が翌月になっています 処理を中断します」という赤いテキストが表示され、背後には取引先からのクレームメールが見切れている。realistic multi-panel screenshot style。日本語テキストを含む画面

プログラムには、自動で日付を印字する処理がありました。実行日の日付をもとに、今月末を計算する仕組みです。ある月、最終日が休日だったので翌日に実行しました。すると、プログラムは翌月の月末を計算してしまったのです。請求書の日付が、全て1ヶ月先の未来になっていました。

気づかずに送信を終えた後、取引先から連絡が来ました。「請求日が来月の末になっています」という内容でした。その連絡を受けた時の動悸は、今でも忘れられません。血の気が引くような思いで、急いで修正対応を行いました。この失敗から、私は重要な教訓を学びました。

自動化の暴走防止と安心の日付チェック

自動化スクリプトには、ブレーキの機能が不可欠です。暴走を防ぐための仕組みを、すぐにコードへ追加しました。datetimeモジュールを使い、現在の日付を厳密に取得します。そして、計算された請求日が正当かどうかを判定させました。

もし日付がズレていた場合、処理を強制停止させます。画面に警告メッセージを出し、作業者に知らせるようにしました。人間の確認漏れを、システムがカバーする仕組みです。これこそが、真の業務効率化だと強く感じています。

この機能を入れてから、発行ミスはゼロになりました。スクリプトを走らせる前に、日付を確認する習慣もつきました。仕組みに守られているという安心感は、何物にも代えられません。手作業だけでは得られなかった、大きな安心を手に入れました。

残業ゼロ達成!自動化の軌跡

度重なる失敗と修正を繰り返し、システムが完成しました。今では、毎月安定して稼働を続けています。導入前は、月末に12時間の残業が発生していました。しかし、今ではその残業はほぼゼロになっています。

最初の3ヶ月間は、試行錯誤の連続でした。バグを直しては動かし、また問題が出ては調べる。この繰り返しは大変でしたが、価値がありました。徐々にスクリプトが安定していくのを、肌で感じることができました。今では、請求書発行が完全なルーティンになっています。

以前のような、「月末が怖い」という感覚はありません。完璧なコードでなくても、業務の負担は減らせます。振り返れば、この道のりは3つのステップに集約されます。一つ目は、CSVでのマスタ整備とopenpyxlの設定です。二つ目は、win32comを使ったPDF化と自動仕分けになります。

自動化がもたらす心の解放と平穏な月末

そして三つ目は、日付ミスを防ぐ安全網の設置です。バックオフィス業務の効率化には、共通の考え方があります。システムが代行できる手作業は、徹底的に任せるべきです。それはGASによる自動化事例とも共通する発想です。

手作業の削減は、単なる時間短縮ではありません。担当者の精神的な負担をなくすことに、最大の価値があります。定型作業を機械に任せる考え方は、どんな業務にも応用できます。最初の一歩は大変ですが、得られる感動は大きいです。実際に動いた時の喜びは、それまでの苦労を上回ります。

かつて私を苦しめていた、地獄のような作業がありました。胃痛と目の霞みに耐えながら、数字を打ち込んでいました。そんな日々は、もう過去のものです。今ではコーヒーを飲んでいる間に、全ての作業が完結しています。この平穏な月末を、皆さんもぜひ手に入れてください。



無料プレゼント

Excel業務を自動化する前に確認するチェックリスト(PDF)

自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。

無料でチェックリストを受け取る

¥980 ミニキット

コピペで動かせる3スクリプト+自動化チェックリスト

最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。

ミニキットを見る(¥980)

関連リンクとチェックリスト

関連する学びを少し広げるなら

PythonやExcelまわりの自動化をもう少し体系的に学びたい方には、実務向けの技術書で土台を固める方法もあります。

Python業務自動化関連書籍(Amazon) →

学習サービスとアンケート

このスキルを活かしてさらに前へ進むなら

PythonやExcel自動化スキルを持ったまま、ITエンジニアとして転職したい方には「EBAエデュケーション」が選択肢です。企業が求めるエンジニア像に合わせたカリキュラムで、実務直結のスキルを習得できます。

ITエンジニア転職・EBAエデュケーション →


[アンケート] この記事は役に立ちましたか?


1問だけ回答する