月次レポートをExcelで毎回手作りしていた担当者が、Pythonとopenpyxlとmatplotlibでグラフ付き自動生成できるようにした話

月末月初のExcelレポート、修正沼の地獄

会社員にとって、月末月初はまさに地獄のような時間ではないでしょうか。各部署から売上データや進捗状況が集まってきます。それらをかき集め、月次レポートとして整える作業です。この作業が待っているからです。私の場合、このレポート作成だけで毎月4〜6時間を奪われていました。

前月のExcelファイルをコピーして、ファイル名を変更します。そこへ新しい数値を流し込みます。グラフのデータ範囲は手動で引っ張り直す。このような作業を繰り返していました。

レイアウト崩れとデータミス

やっていることは単純なコピペと微調整ばかりです。データが変わるたびに、グラフの縦軸の最大値が勝手に変わりました。その結果、レイアウトが微妙に崩れてしまうこともよくあったのです。この「見た目の修正沼」が、恐ろしく時間を食いました。月末の締め日というプレッシャーがありました。チカチカするExcel画面を睨み続けていました。目の奥が鉛のように重くなってしまいます。

まず、前月のファイルを使い回した結果、問題が起きました。非表示になっていた古いデータ行に気づかず集計してしまいました。提出直前で計算が合わないことに気づいたこともありました。慌てて手作業でセル範囲を一つずつ選択し直しました。焦りでマウスを持つ手が汗ばみました。クリックをミスして、グラフが画面外に吹き飛んでしまったこともあります。結局その日は終電ギリギリまで残業しました。翌日はひどい肩こりに悩まされてしまいました。

手作業限界、自動化への道

手作業の限界を痛感した決定的な出来事がありました。それは、苦労して仕上げたレポートをPDF化し、関係者に送付した直後のことでした。

上司からチャットで短いメッセージが飛んできました。「先月と色が違います」という一行でした。

原因はすぐに分かりました。前月のデータをコピーし、数値を書き換えた際のことです。グラフの系列設定が一部だけ古い状態のまま残っていたのです。修正自体は簡単でした。該当する棒グラフを右クリックし、「データ系列の書式設定」から色を選び直すだけです。

しかし、この1か所の修正のために30分が吹き飛んでしまいました。元のExcelを開き直しました。修正後、PDFを再発行しました。関係者にはお詫びのメールと共に再送する。これらの作業に時間がかかったのです。

次に、上司からの指摘を受けました。全月分のPDFを見直してみたのです。他にも問題を発見しました。グラフのフォントサイズが11ptの月と12ptの月が混在していました。凡例の位置も微妙に上下にズレていたのです。

誰も気にしていないかもしれません。しかし、一度気になり始めると、すべてのページにアラが見えてきます。自分の仕事が雑だと感じ、胃が痛みました。人間の手でコピペと微調整を繰り返す運用は、構造的にミスを生みます。この無間地獄から抜け出すには、人間の介入をゼロにするしかありません。そう決意した瞬間でした。

PythonでExcel帳票自動化、品質と安全

解決策として目をつけたのがPythonです。CSVで出力した売上データがあります。これをpandasというライブラリで読み込みます。

matplotlibでグラフを画像として自動生成します。それをopenpyxlを使ってExcelの指定したセルに貼り付けるアプローチです。この手法の最大の利点は、グラフの色やフォントサイズといった「見た目のブレ」を完全に排除できることでした。

matplotlibにはrcParamsという設定機能があります。ここでフォントの種類やサイズ、グラフの色をあらかじめ定義しておけば、データがどう変わろうと指定通りのデザインでグラフが生成されます。

出力されたPNG画像をopenpyxlのadd_imageメソッドでExcelの特定のセルに固定します。前月比や目標達成率といった指標も、Excelの計算式に頼りません。Python側で計算し、直接セルに書き込む設計にしました。Excel側には一切数式を残さないようにしています。これは、誰かが誤ってセルを上書きしてしまう事故を防ぐためです。

データ処理の壁と体系的学習の重要性

一方で、こうした処理を一から自力で書こうとすると、非エンジニアは必ずどこかで躓いてしまうものです。実際、最初は辞書型データの扱いやDataFrameの行抽出で何度もエラーを出しました。

実務の自動化に本気で取り組むなら、

侍エンジニア

のようなプロの力を借りるのが一番の近道です。体系的に学ぶことをおすすめします。

また、Amazonの

Pythonデータ分析実務書

でpandasやmatplotlibの基礎を叩き込むのも良い方法です。ネットの断片的なコードをコピペして繋ぎ合わせるだけでは、エラーが出た瞬間に手も足も出なくなってしまいます。

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

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

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

PythonでExcel PDF化とフォルダ管理

グラフが埋め込まれた完璧なExcelファイルが完成しても、まだ作業は終わりません。関係者に配布するため、PDFへ変換する必要があります。さらに、適切なフォルダに格納する手順も残っています。

ここでもPythonの力を借ります。Windows環境であれば、win32comというライブラリを使うことが可能です。Excel本体を裏側で操作できるのです。

具体的には、win32com.client.Dispatch(‘Excel.Application’)を呼び出します。これにより、PythonからExcelを開き、ExportAsFixedFormatを実行できます。一瞬でPDF化が完了します。

最初はopenpyxlだけでPDF化まで試みました。しかし、openpyxlは「Excelファイルというデータ」を扱うツールです。印刷やPDF出力といったExcelアプリケーションの機能は持っていません。このことを知らずに数時間を無駄にしてしまいました。

結局win32comに切り替えたことで、手動で「名前を付けて保存」からPDFを選ぶ面倒な作業から完全に解放されました。

年月フォルダ自動生成と多彩な応用

os.makedirsを使って「2026年05月」のような年月フォルダを自動で作成する処理も組み込みました。

請求書のPDF一括出力

給与明細の自動発行

シフト表のPDF配布

でも、このフォルダ自動生成のテクニックは非常に重宝します。

コードには、すでに同名のファイルが存在する場合の上書き防止チェックも入れています。これで「営業部」「管理部」と部署ごとにフォルダを分けて一括保存するような応用も簡単にできるようになりました。

1円のズレ解決、信頼の安全設計

これで完璧だと思った矢先、恐ろしいトラブルに見舞われました。自動生成されたレポートの合計売上金額が、手元のシステムから出力した合計値と1円だけズレていたのです。

原因はPythonの浮動小数点演算誤差という罠でした。プログラムの世界では、小数を計算する際に微妙な誤差が生じることがあります。パーセンテージの計算や消費税の端数処理などでこの誤差が蓄積すると、最終的な金額が合わなくなってしまいます。

経理や管理部門にとって、1円のズレは死活問題です。手作りツールによる計算結果が1円でもズレていれば、二度と自動化ツールなど使わせてもらえなくなるでしょう。

この問題を解決するため、標準ライブラリのdecimalモジュールを導入しました。数値を正確に扱い、丸め誤差を完全に排除するロジックを組み込んでいます。

それだけでなく、「システムから取得した総計」と「Pythonが積み上げた合計」を突き合わせるassert文を追加しました。もし1円でも数値が合わなければ、ターミナルに「❌ 合計不一致: 期待値xxx 実際値yyy」と出力し、強制終了する仕組みです。人間が目視で確認しなくても、プログラム自身にデータの正しさを証明させます。この安全設計こそが、業務で使えるツールと単なるおもちゃを分ける境界線となるのです。

Pythonによる業務自動化

まず、毎月の憂鬱だった月次レポート作成は、今ではスクリプトを実行するだけで終わるようになりました。振り返ってみれば、実装したのはシンプルな3つのステップです。

ステップの1つ目は、生データをpandasで読み込みます。matplotlibで寸分違わぬグラフを作り、openpyxlで定位置に配置することです。

2つ目は、win32comを使ってPDFに変換することです。osモジュールで作成した年月フォルダへ綺麗に整理して保存します。

そして最後の3つ目が集計検証です。decimalとassertを使って、手計算と絶対に狂いがないことをプログラムに保証させます。

この仕組みを応用すれば、

請求書の発行処理

や、

複雑な給与明細の配布

、さらには

毎月頭を悩ませるシフト表の作成

までもが自動化の射程圏内に入ります。

ツールに振り回されて残業する日々はもう終わりにできます。正確無比なロボットに作業を丸投げしませんか。浮いた時間で本来やるべき仕事に向き合う環境は、すぐそこにあるのです。

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

無料プレゼント

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

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

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

¥980 ミニキット

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

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

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

関連書籍

Python業務自動化関連書籍を、手元で見返せる形にしておきたい場合

Pythonやデータ処理の自動化は、作りながら同じ基礎を何度も確認する場面が多いです。手元で見返せる本があると、調べ直しの時間を減らしやすいです。

Python業務自動化関連書籍をAmazonで探す

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

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

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

プログラミングスクール Enjoy Tech!(エンジョイテック) →

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

30秒で答えられます。改善の参考にします。

1問だけ回答する