【後編】Excelのシート名が毎回違う問題、「候補名リスト」で逃がしたらエラーが完全に消えた話

手作業修正の無間地獄、パイソンに託す夢

前編では、手作業によるシート名の修正という無間地獄を抜け出すための第一歩を踏み出しました。

手作業で一つひとつシート名をリネームして回る。そんな非生産的な時間から解放されたくて、Pythonでの自動化に希望を託したはずでした。各部署から送られてくるExcel集計ファイルを特定のフォルダに放り込み、スクリプトを実行するだけ。これで毎月の集計作業が楽になると本気で思っていたのです。

本番でのシート名表記ゆれ

まずはテスト用のファイルでスクリプトを動かしてみました。黒い画面に処理完了のメッセージが表示され、完璧に動いているように見えました。
しかし本番の月末。全国の支店から本物のデータが集まり、意気揚々とスクリプトを実行した瞬間、赤い文字がターミナルを埋め尽くしました。処理が完全に停止してしまったのです。

エラーの理由は信じられないほど単純なものでした。
シート名が見つからないのです。
指定していたシート名は「4月分」。しかし、札幌支店から送られてきたファイルのシート名は「4月集計」となっていました。大阪支店は「4月分」と全角数字を使い、福岡支店に至っては単に「4月」とだけ入力されています。
ルールを決めても、人間はどうしても表記を揺らしてしまうものなのですね。

手作業地獄再来、自動化の壁

エラー画面に真っ赤な文字でKeyErrorと出たとき、本当に血の気が引きました。結局その日は、泣きそうになりながら30個以上のファイルを開いて、手作業でシート名を変える羽目になったのです。

ファイルの数だけ手作業でシート名を確認し、スクリプトが読み込めるように修正する。前編で解決したはずの手作業地獄に、再び引きずり込まれてしまいました。
これでは自動化の意味がありません。むしろエラーで止まる分だけストレスが増加しています。
ここで多くの人が「Pythonなんて実務じゃ使えない」と諦めてしまうかもしれません。ですが、解決策は意外なほど泥臭いところにありました。

あいまい検索の落とし穴

シート名の揺れを吸収するために、最初に思いつくのは「あいまい検索」ではないでしょうか。
シート名に「4月」という文字列が含まれていたら、それを対象として読み込めばいい。そう考えがちです。正規表現や部分一致を使えば、コードはとてもスマートに見えます。

しかし実際には、100ファイルあれば2〜3ファイルは意図しないシートを拾ってしまうものです。

Excelシート名の落とし穴

ただ、このやり方は実務において少し危険が伴います。
現場のExcelファイルには、担当者の試行錯誤の痕跡が無数に残されているものだからです。
「4月分」の隣に「4月分_修正」というシートがあるかもしれません。「前年4月分」という比較用の隠しシートが存在する可能性もあります。「4月(没)」といった、途中で作業を放棄した残骸すら珍しくありません。

以前、あいまい検索で動かした翌月、集計結果が合わなくて焦ったことがあります。調べてみたら、担当者が親切心で残してくれた「4月分_旧データ」というシートをスクリプトが拾ってしまっていたのです。便利にしようとしたのに、確認作業でかえって時間がかかってしまいました。

泥臭い候補名リストによる安全確保

あいまい検索は意図しないデータを吸い上げるリスクがあまりにも高いのです。一度でも集計ミスを起こせば、自動化システムそのものへの信用が完全に失墜しかねません。
ではどうすればよいのでしょうか。
スマートさを一度捨てて、泥臭い方法を選んでみましょう。それが「想定される候補名のリスト」を作ることです。

「4月分」「4月集計」「4月度」「4月」。
このように、担当者がつけそうな名前をあらかじめリストアップしておきます。そして、そのリストの順番通りにシートの存在を確認していくのです。この方法はコードの見た目こそ野暮ったいですが、想定外のシートを誤って読み込むリスクを極限まで減らすことができます。
自動化において最優先すべきは、コードの美しさよりも、データ破壊や誤集計を起こさない安全性だと感じています。

候補リストを使ったフォールバック(代替策)の仕組みは、システムをとても堅牢にしてくれます。一つ目がダメなら二つ目、二つ目がダメなら三つ目と、あらかじめ用意した安全な選択肢の中だけでシステムに探させるのです。

💡 ここで一度立ち止まって考えてみてください

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

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

変化に強いExcelシート名自動特定術

具体的な実装のメカニズムを解説します。
Excelファイルの読み込みにはデータ分析ライブラリのpandasを使用します。ここで重要なのは、外部からいきなりシート名を決め打ちして読み込みにいかないことです。
相手のファイルにどんなシートが存在するのか、まずは全容を把握するようにしましょう。

使うのはpd.ExcelFile()という機能です。
これでExcelファイルをオブジェクトとして読み込みます。すると、そのオブジェクトが持つsheet_namesという属性から、ファイル内に存在するすべてのシート名をリスト形式で取得できます。

現場の揺らぎを吸収するシステム

これで「相手の手札」がすべて見えた状態になります。
そこに、こちらが用意した「候補リスト」をぶつけてみましょう。
candidates = [‘4月分’, ‘4月集計’, ‘4月度’, ‘4月’]
このようなリストをPython上で定義し、あとは簡単なループ処理を書くだけです。
候補リストの先頭から順番に要素を取り出し、それが相手の手札(sheet_names)の中に含まれているかを判定していきます。

含まれていれば、それが正解のシート名です。変数にその名前を保存し、ループを抜けます。
そして、特定した正しいシート名を使って、pandasのread_excelでデータを読み込むのです。

現場に寄り添うシート名処理

この処理の素晴らしいところは、優先順位をつけられる点にあります。
リストの先頭を「一番正しいルール通りの名前」にしておき、後ろに行くほど「イレギュラーな名前」を配置します。そうすることで、常に最も望ましいシート名から探しに行くことができます。
もし候補リストの最後まで見つからなかった場合は、初めてそこでエラーを出せばいいのです。

エラーの原因が「想定外のシート名であること」が明確になり、対策も簡単になります。新しいイレギュラー名を見つけたら、それを候補リストの末尾に追記するだけでシステムは少しずつ成長していきます。

「ルールを守らない人間が悪い。シート名を統一させるよう通達を出すべきだ」
そう憤る気持ちは痛いほどわかります。しかし、それは残念ながら抜本的な解決にはなりません。

揺らぎを吸収する自動化

以前、全社に向けて「シート名は〇月分で統一してください」とメールでお知らせしたこともありました。でも、担当者が変わったり繁忙期になったりすると、あっという間に元のバラバラな状態に戻ってしまいます。ルールを守らせるためのチェック作業で、かえって自分の仕事が増えるという本末転倒な結果になってしまいました。

人間の行動をシステムに合わせて矯正しようとすると、必ずどこかに軋轢が生まれます。
現場の担当者も悪気があってシート名を変えているわけではありません。日々の忙殺される業務の中で、つい前月のファイルをコピーしてそのまま使ってしまったり、無意識に手癖で入力してしまったりするのです。

経験上、だいたい3ヶ月も経てば、元のバラバラな状態に戻ってしまうのが常です。

不完全データ対応、自動化の本質と実践

だからこそ、システム側に「揺らぎ」を吸収するバッファを持たせる設計が必要になります。
候補リストを使ったシート名のフォールバック処理は、まさにそのバッファといえます。
「人間は間違えるし、表記は揺れるものだ」という前提に立ち、それをシステムが黙って受け止めるのです。
泥臭いリストアップ作業と、数行のループ処理。たったこれだけの工夫で、毎月月初にターミナルを埋め尽くしていたあの赤いエラー文字は、完全に消え去りました。

各部署から集まった無数のExcelファイルが、エラーを一度も吐くことなく次々と読み込まれ、データが結合されていく様子は感慨深いものです。
前編で苦しんだ手作業でのリネーム地獄からの、完全な脱却です。
シート名が少し違っていても、Pythonスクリプトが裏側で密かに候補リストと照合し、正しいデータを引っ張ってきてくれます。この泥臭い仕組みを入れたおかげで、シート名の違いでスクリプトが止まることはほぼなくなりました。

おかげで月初の集計作業は「ボタンを一つ押すだけ」になりました。

不完全データ処理のフォールバック自動化

業務を自動化するということは、必ずしも完璧に整頓された理想的なデータを用意させることではないのだと学びました。
現場から上がってくる不完全で泥臭いデータを、いかに安全に、そして確実に処理できる仕組みを作るか。
候補リストによるフォールバックは、その本質を突いた極めて実務的なアプローチです。もう二度と、シート名の違いでスクリプトが止まる絶望を味わうことはないはずです。

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

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

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

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。現役エンジニアのサポートで、未経験から実践的なスキルを身につけられます。

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

¥980 ミニキット

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

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

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

📝 この記事は役に立ちましたか?

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

フォームに回答する(1問だけ)