毎月1日、VBAエラー修正の憂鬱な儀式
毎月1日の朝は、パソコンの電源を入れます。立ち上げる時に、なんとも言えない嫌な汗をかいてしまいます。またあの集計作業が始まると思うと、非常に気が重いです。月末から月初にかけては、売上データの集計がどうしても集中します。それが原因です。
前任者から引き継いだVBAマクロを実行します。まずはボタンを押してみます。数秒の間、画面がチラチラと瞬きます。今回こそは無事に終わってほしいと、心の中で祈ります。しかし、画面には無情にも「実行時エラー’9’」が出ます。
繰り返されるエラーと手作業での修正
「インデックスが有効範囲にありません」という無機質な表示です。ダイアログが画面の中央に居座ります。これを見ると、目の奥がどっと重くなる感覚に陥ります。このVBAマクロは、毎月1日の朝に実行すると止まります。かなりの高確率で中断されるのです。
そのたびに、黄色いデバッグ画面が表示されます。私は慌ててVBEの画面を開き、該当するコードを探します。例えば `Sheets(“2024年4月”)` の部分を書き換えます。現在の月に合わせて手入力する作業です。具体的には `Sheets(“2024年5月”)` と修正します。
この作業を、毎月のように繰り返していました。この作業自体は、たったの数十秒で終わるものです。しかし、この修正があるだけで憂鬱でした。前日の夜からずっと胃が重かったことを、今でも鮮明に覚えています。

マクロの手動修正、毎月の憂鬱な儀式
どれほど工夫して複雑な計算式を組んでも、マクロは止まります。シート名がたった1文字違うだけで、処理は動きません。「そんなシートは知りません」と言わんばかりの冷たい態度です。そのまま、処理を拒否されてしまいます。融通が利かないというか、少し意地悪だなとさえ感じていました。エラーを吐き出す画面を前にして、重い気持ちでキーボードを叩きます。そして、直接プログラムのコードを書き換えるのです。手動で修正するという矛盾した作業でした。これが当時の私には、毎月の憂鬱な儀式でした。
シート名統一、現場の現実
コードを毎回書き換える手間を省くため、ある対策を考えました。各担当者に通達を出しました。内容は「シート名は必ず『YYYY_MM』で統一する」というものです。マクロには、現在の年月からシート名を自動生成する処理を追加しました。名前が一致すれば、自動で動くようにしたのです。
自分では完璧な計画だと思いましたが、現実は甘くありません。人間をルールで縛ることは、想像以上に難しかったのです。
ルールが守られない現場の実態
意を決して全社にお願いを出した翌月のことです。各拠点のファイルを開き、私は愕然としました。そこには「24年5月」や「5月分」という名前が並んでいます。「Sheet1」という初期設定のままのものもありました。
極めつけは「5月分(修正版)」という名前です。ルールを無視した自由な命名でした。事情を聞くと、「前のファイルを使い回した」との返事でした。ルールで人を縛る虚しさを、痛感した瞬間です。
現場の人々は日々の業務で非常に多忙です。忙しい中では、些末なことに意識が回りません。Excelのシート名などに割く余裕はないのです。彼らにとっては、前月のコピーを流用するのが最適解です。中身の数字だけを書き換えて提出するのです。そこには悪意など、全く存在しないのです。
ファイル名の無法地帯、手作業に潰れる午前
当時、私が集計を担当したのは全30拠点のファイルでした。驚くべきことに、約40%の拠点がルールを無視していました。指定とは違うシート名で送られてきたのです。私は毎回、12個のファイルを手作業で開く必要がありました。そして、シート名を一つずつ手で直していきます。その作業だけで、午前中の貴重な時間がすべて潰れていました。
最終的に集まるファイルは、無法地帯と化していました。「5月」や「05」、全角の「5月」など、表記はバラバラです。これら全ての表記揺れを固定の文字で照合するのは困難です。そのアプローチは最初から破綻していました。人間をシステムに合わせようとする試みは困難でした。「ルールの無視」という現実の前に、敗れ去る運命だったのです。
固定名依存と自動化の限界
VBAのコードを毎月書き換える運用は、非常に危険です。ミスという爆弾を、常に抱えて作業する状態でした。ある月のことです。急ぎの集計で焦って、コードを修正したことがありました。その際、必要な変数を誤って一箇所削除してしまいました。そのせいで、数時間も原因不明のエラーと戦う羽目になりました。
コードに直接シート名を書き込むと、システムが硬直化します。毎月の手動メンテが必要な仕組みは、自動化とは呼べません。それは、ただの「少し便利な手作業」なのだと痛感しました。
INDIRECT関数による解決の試みとその限界
次に、Excelの標準機能で回避できないかと考えました。そこで試したのが、INDIRECT関数を使う方法です。セルに入力された文字を、シート名として動的に参照させます。例えばA1セルに「2024年5月」と入力します。すると、数式がそのシートを自動で探す仕組みです。

しかし、この方法もすぐに限界を迎えました。INDIRECT関数は「揮発性関数」と呼ばれます。Excelで操作するたびに、再計算が走るためです。大量のデータを扱うファイルで多用すると、動作が重くなります。最悪の場合、Excelがフリーズして強制終了しました。
手作業による修正は、ミスを生み出し続けます。また、強引な関数はExcelの安定性を損ないます。固定された名前に依存する限り、この状況は変えられません。私はついに、その事実に気づきました。
Python×Excel自動化を動画で学びたい方へ
PythonでのExcel操作を基礎から学びたい方には、オンライン学習サイト「Udemy」が選択肢です。自分もopenpyxlの使い方は、動画講座で実際の画面を見ながら覚えました。セール期間なら手頃な価格で始められるので、気になる講座をのぞいてみてください。
Pythonでシート名動的取得、エラー解消
特定の名前を固定して指定すると、少しの変化でエラーになります。そのため、考え方を変える必要があります。まず、ファイルの中にどんなシートがあるか調べてもらいましょう。プログラムに確認を任せれば良いのです。
この逆転の発想を実現する道具が、私にとってはPythonでした。Pythonには、分析に強いpandasというライブラリがあります。また、Excel操作を得意とするopenpyxlも存在します。
これらのツールには、素晴らしい機能が備わっています。ファイルを読み込む際、全シート名を一括取得できるのです。リスト形式で簡単に取り出すことが可能です。
具体的なコードも非常にシンプルです。pandasなら `ExcelFile.sheet_names` を使います。openpyxlなら `workbook.sheetnames` を使います。これだけで情報を得られるのです。

この機能は、事前にシート名を知る必要がない点が優秀です。ファイルを開く前に準備はいりません。プログラムが自ら中身を覗き込み、今のシート一覧を返してくれます。
Python、シート名自動取得
以前は手動でファイルを1つずつ開き、シート名を目視していました。さらにマクロのコードを開き、該当箇所を書き換えます。1ファイルにつき、迷う時間も含め約2分は必要でした。30拠点分なら、合計60分も費やしていたことになります。
それに対し、Pythonの確認スピードは驚異的です。シート名の取得にかかる時間は、わずか0.05秒ほどです。パソコンが瞬きをする間もありません。すべての準備が、あっという間に整ってしまいます。
シート名をリスト形式で取得できれば、Pythonの出番です。得意なデータ処理の土俵に持ち込めます。取得した配列の中身を、ループ処理で順番に確認します。目当てのシート名があれば集計し、なければスキップします。固定の名前によるエラーは、これで完全に消滅しました。
Python正規表現でシート名柔軟抽出
全シート名をリスト化できても、集計対象を特定する工程が必要です。Pythonの文字列操作や正規表現が、ここで真価を発揮します。
「2024_05」や「5月分」など、現場の表記揺れへの対応が必要です。完全一致だけで探そうとすると、これまでは失敗していました。
正規表現を活用した柔軟なシート抽出
リスト内包表記などを使えば解決できます。曖昧な条件でも、目的のシートを確実に抽出可能です。
例えば、「月」という文字が含まれているかをチェックします。数字の後に月が続くパターンでの検索も可能です。

Pythonのコードは、非常にシンプルにまとまります。リスト内に「5」と「月」があるか判定するだけです。
全角の「5」も、正規表現で半角にすれば比較できます。これにより、目的のシートを簡単に抽出できます。
人間の思考プロセスを、そのままプログラムに再現できるのです。
Pythonが変える!自動集計とメンテナンスフリー
「5月」や「5月分」、「05」といった名前で構いません。どんなにバラバラな名前でも、Pythonが柔軟に判断してくれます。
「これは今月の集計用ですね」と自動で判別します。次々と集計を終わらせる様子に、感動で体が震えるほどでした。
最後に「30ファイルの集計が完了しました」と表示されます。あまりにあっけなく終わり、コーヒーを飲むのも忘れたほどです。
ただ呆然と画面を眺めていました。あれほど私を苦しめた問題が、数行のコードで解決したのです。
メンテナンスを楽にする工夫
さらに仕組みを洗練させるため、工夫を加えました。検索キーワードをコードの中に直接書かないようにしたのです。代わりに、外部の「設定ファイル」で管理します。
設定ファイルに「対象は5月」と記述しておきます。プログラムは実行時に設定ファイルを自動で読み込みます。そのキーワードでExcelシートを探しに行く仕組みです。
この構造なら、別の部署のルールにも対応できます。設定ファイルを少し書き換えるだけで済みます。プログラム本体を触る必要はありません。これが、本当のメンテナンスフリーな状態です。
不完全を包む自動化
自動化を強力に進める際、つい綺麗なデータを要求しがちです。システム優先で、人間に厳しいルールを押し付けてしまいます。しかし、組織全員がルールを守り続けるのは現実的ではありません。
シート名の変更や表記の揺れは日常茶飯事です。これらは排除すべきエラーではありません。むしろ、あらかじめ起きる「自然現象」として織り込むべきです。
現場の現実に寄り添う柔軟な設計
Pythonでシート名を動的に取得します。正規表現を使い、曖昧な検索を行う手法を採用しました。また、設定ファイルで条件を柔軟に変更できます。
この手法は「人間は間違える」という前提に立っています。プログラム側でカバーしようとする「優しさ」だと最近は感じています。
現場の現実に合わせ、表記揺れを許容するプログラムを書きます。その結果、月初に感じていた胃の痛みは消滅しました。エラーを見て溜息をつくことも、書き換える必要もありません。
ボタン一つで、システムが空気を読んで正しいシートを探し出します。そして、無言のまま完璧に集計を完了してくれます。現場に寄り添い、開発者の負担もゼロにする。これこそが、自動化で手に入れるべき本当の果実ではないでしょうか。
Pythonによるシート名取得の仕組み
Pythonを活用すれば、Excelファイルを開けます。全シート名をリストとして取得可能です。`pd.ExcelFile` という命令を一行書くだけです。シート名のリストが瞬時に手に入ります。取得したリストを調べます。目的のシート名があるかチェックします。複雑な表記揺れにも柔軟に対応できるようになりました。まさに、目から鱗が落ちる画期的な感覚でした。
「5月」や「05」などの表記揺れも怖くありません。Pythonの正規表現という機能を使います。全てを「5月」という共通の意味で捉えられます。キーワードに合致するものを自動で探し出します。担当者がどんな名前を付けても大丈夫です。マクロが止まる心配はありません。この圧倒的な柔軟性に、深い感動を覚えました。
Python導入後の劇的な変化
以前の私は、毎月の集計作業のたびにエラーと格闘していました。パソコンの前で冷や汗をかくほど、大変な作業だったのです。しかしPythonを導入してからは、憂鬱な時間は一切なくなりました。スクリプトを実行すれば、全拠点のデータが瞬時に抽出されます。そのまま自動で集計まで完了し、数時間の作業も数分で終わります。
この変化は、私の仕事への考え方を根本から変えてくれました。知識ゼロの私でも、Pythonを使えば業務を自力で自動化できます。強力なツールによって、長年の課題を解決できると証明できました。これは私だけでなく、他部署の改善にも貢献できると気づきました。業務効率化には、大きな可能性が秘められています。効率化の喜びを感じられる日が来るとは、夢にも思いませんでした。
事務職が手にした新しい価値
Pythonを学ぶ中で、エラー解消だけでなく、全体を俯瞰する力も養われました。問題の本質を見極め、技術で解決します。このプロセスが、業務に新しい価値とやりがいをくれました。
今では、毎月1日の朝は憂鬱ではありません。改善の可能性に満ちた、前向きな時間だと感じています。
プログラミングは事務職の強力な味方になります
このスキルは、決してIT専門職だけのものではありません。文系出身の事務職にも役立つ、強力なツールです。日々の困りごとの解決に役立ち、本当に驚いています。
これからもPythonを活用し、職場の「憂鬱な儀式」を一つずつ解消したいと考えます。
無料プレゼント
Excel業務を自動化する前に確認するチェックリスト(PDF)
自動化の可否や手法の選択、避けるべき落とし穴。迷うポイントを1枚にまとめました。アドレスだけで受け取れます。
著者はこうして解決の糸口を見つけた
私も同じ境遇から始まりました。独学でここまで自動化した道のりを参考にしてみてください。
関連書籍
Python業務自動化関連書籍を、手元で見返せる形にしておきたい場合
Pythonやデータ処理の自動化は、作りながら同じ基礎を何度も確認する場面が多いです。手元で見返せる本があると、調べ直しの時間を減らしやすいです。
学習サービスとアンケート
¥980 ミニキット
コピペで動かせる3スクリプト+自動化チェックリスト
最新ファイルの自動選択や、部署名の正規化が可能です。さらにCSVの文字コード確認も含む3本セットです。今週の作業を1つだけ楽にするためのミニキットをご用意しました。

