拠点ごとに祝日が違う会社で、Pythonが勤怠集計の地獄を終わらせた話

勤怠集計の悪夢

毎月25日の朝、オフィスに出社するときの心境を今でも鮮明に覚えています。デスクに座る前から、すでに胃の底がずっしりと重くなるような感覚がありました。全国にある10カ所の拠点から、勤怠データが一斉に送られてくる日だからです。これらは各拠点の総務担当者が、一つずつ手入力で作成したExcelファイルでした。この膨大なデータを一つのシートにまとめなければなりません。さらに祝日出勤や残業時間を細かく計算し直すのが、当時の私の主な仕事でした。

メールの添付ファイルから、10拠点分のExcelを一つずつ丁寧にダウンロードします。次に、それらをマスターシートへ順番にコピペする作業を何度も繰り返しました。作業の途中で「セルが結合されています」というエラーが出ることもあります。そのたびに、私は心臓が止まりそうなほどの強い不安を感じていました。A拠点は、名前の列がB列に設定されています。しかし、C拠点はC列にあるといった微妙なフォーマットの違いがありました。こうした細かな差異に気づかないまま、作業を進めてしまうことも多かったです。結果として、全員の残業時間が狂った状態で上司に出したこともあります。その際、上司から非常に厳しく指摘を受けた経験は今でも忘れられません。

手作業による集計の限界とミス

まず、10拠点分のデータを正確に突き合わせる作業から始めなければなりません。その工程を終えるだけで、丸1日の時間が完全につぶれてしまいました。さらに困ったことに、拠点ごとに「祝日」の設定が大きく異なります。カレンダー通りに休みを設定しているのは、本社だけでした。製造拠点は、工場のカレンダーに合わせる必要があったのです。また、営業所は地元の祭りに合わせて休みになることもありました。誰がいつ休むのが正解なのか、把握するのは非常に困難な作業です。担当者の私ですら、全てを完璧に把握しきれてはいませんでした。毎月、必ずどこかの拠点で勤怠計算にミスが発生してしまいます。その結果、月末の経理部門はいつも殺気立ったような雰囲気でした。

複雑な拠点別祝日と管理の実態

そもそも、なぜ同じ会社なのに祝日がバラバラなのでしょうか。それには、非常に複雑な背景と理由が存在していました。本社は暦通りのカレンダーに基づいて運用されています。しかし、工場を併設している拠点は事情が全く異なりました。お盆や正月に長期休暇を作るための工夫が必要だったのです。そのために、祝日を平日の出勤日に振り替えて運用していました。

地域の特有な慣習も、非常に厄介な問題となっていました。北海道の拠点では、独自の特別な休暇が設定されています。また、創立記念日の扱いも拠点ごとにバラバラな状態でした。設立された年が異なるため、日付自体も統一されていません。これらを一つのシステムで管理しようとすると、すぐに破綻してしまいます。全国一律のカレンダーを適用すると、深刻な誤認が発生するからです。工場勤務の社員が「休日に出勤した」と判定されることになります。すると、莫大な休日割増手当が誤って算出されてしまうのです。そのため、担当者がカレンダーを机に貼って目視で確認していました。一つずつチェックを繰り返すしか、確実な方法がなかったのです。

拠点別カレンダーを見比べながら、Excelの行を丁寧になぞる作業が続きます。このような作業は、人が行うにはあまりに過酷な業務であると感じていました。

jpholidayで日本の祝日をPythonで自動判定

この過酷な地獄のような状況を終わらせるため、私は決意をしました。そこで、プログラミング言語のPythonを導入することにしたのです。最初の大きな課題は、祝日の判定をどう自動化するかでした。日本の祝日を、プログラムに正確に認識させる必要があります。Pythonには、日付を扱う便利なライブラリが多数存在します。海外製のライブラリも、当初は検討の対象に含まれていました。しかし、日本の複雑な祝日制度に完全対応するのは困難です。振替休日や国民の休日といった、日本独自の仕様が壁となります。そこで目をつけたのが、日本特化のライブラリであるjpholidayでした。

ターミナルを開き、必要なインストールコマンドを実行します。たった一行のコードを書くだけで、開発の準備は整いました。指定した日付が祝日かどうか、プログラムが瞬時に判定してくれます。変動する春分の日や秋分の日にも、自動で対応が可能です。全て内部で正確に計算されるため、信頼性は非常に高いと感じました。日付を渡すと「True」か「False」が即座に返ってきます。これだけで、確認作業が大幅に短縮されると確信することができました。

独自休日のExcel管理

ベースの祝日判定ができても、まだ大きな課題は残っていました。各拠点ごとの「独自の休日」をどう管理するかという問題です。プログラムのコード内に、記念日などを直接書き込むのは避けるべきでした。来年になってカレンダーが更新された際の手間を考えたからです。コードを修正できる人間が私だけになるのは、大きなリスクとなります。

そこで、独自の休日はExcelのマスタファイルで管理することにしました。総務の担当者が、Excelに日付を追記するだけでメンテナンスが完了します。Python側では、pandasという強力なライブラリを使用します。このライブラリを用いて、Excelのデータを読み込む仕組みを構築しました。取得した共通の祝日データと、独自の休日データを結合させます。こうすれば、非エンジニアの方でも容易に更新が可能になります。現場の運用は変えずに、裏側の処理だけを自動化しました。業務改善を組織に定着させるには、こうした工夫が非常に大切です。実際に使う人の立場に立つことが、成功の鍵になると感じています。

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

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

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

PythonでExcel自動化、長年の苦労報われる

自動化に必要な材料は、ようやく全て出揃いました。あとは、拠点から届く大量のファイルを一気に処理するだけです。Pythonのglobモジュールという便利な機能を使用します。これを使えば、特定のフォルダ内のファイルを一括で読み込むことが可能です。「A拠点_10月勤怠.xlsx」などのファイルを、ループ処理で順番に開いていきます。

読み込んだデータに、作成した拠点別の休日カレンダーを適用させます。出勤日と休日を正確に判定し、労働時間から残業を割り出しました直します。複雑な条件分岐も、pandasの機能を使えば簡潔に記述できました。最後に全員分のデータをまとめ、新しいExcelファイルとして書き出します。

初めてループ処理のコードを実行した瞬間のことは、今でも忘れられません。実行ボタンを押すと、数秒で「処理完了」の文字が表示されました。恐る恐る出力ファイルを開くと、完璧な集計表が出来上がっています。1日かけて作っていた表が、一瞬で完成したことに驚きました。思わず「おぉ…」と、独り言が漏れてしまうほどの大きな感動でした。このスクリプトが完成したことで、長年の苦労が報われた気持ちになりました。

自動化の盲点

しかし、実際の業務というものは決して甘くはありませんでした。スクリプトを導入した最初の月末に、思わぬトラブルが発生したのです。自信を持って集計結果を送った直後に、拠点から連絡が入りました。大阪拠点の担当者から、計算ミスを指摘する電話が来たのです。内容は「全員の勤怠が1日分ずつズレている」というものでした。その言葉を聞いた瞬間、私は血の気が引くような思いをしました。

原因を突き止めるため、デバッグ用のコードを仕込んで実行しました。判明した理由は、非常に呆気ないケアレスミスによるものでした。大阪拠点の「創立記念日」は、休日に設定されています。しかし、その年はたまたま記念日が日曜日と重なっていました。翌日の月曜日が振替休日でしたが、マスタに登録がありません。国民の祝日ではないため、jpholidayは関知しなかったのです。独自休日の振替までは、自動で計算する仕組みにしていませんでした。

ですが、すぐにマスタを更新してプログラムを再実行しました。手作業なら数時間のやり直しですが、今回は数秒で作業が終わります。ミスがあっても即座にリカバリーできるのが、自動化の強みだと感じました。

Pythonで叶えた5分の業務自動化

この経験から、マスタの運用ルールを厳格に見直しました。独自休日の振替ルールについても、ロジックを徹底させています。それ以降、毎月25日の職場の風景は劇的に変化しました。朝出社して、届いたファイルを特定のフォルダに保存するだけです。スクリプトを実行し、コーヒーを一口飲む間に処理が終わるようになりました。

かつては丸1日かかっていた作業が、たった5分で完結するようになったのです。上司からも「今月は集計が非常に早いね」と驚かれています。以前のような、ピリピリした経理部門の空気も完全になくなりました。現在では、他の部署からも自動化の相談を受けるようになっています。アルバイトのシフト集計なども、自動化できる道が見えてきました。Pythonを学んだことで、会社全体の働き方が変わったと実感しています。

Python実務エラーの壁と学び方

もちろん、ここまでの道のりは決して平坦なものではありませんでした。非エンジニアが独学で始めると、必ずエラーの壁にぶつかります。とくに苦労したのが、Excel内の「空欄セル」の扱いです。文字列の空欄と、数値の空欄は性質が全く異なります。これらの違いを理解できず、合計値が狂う現象に何度も悩まされました。ネットで調べても、難解な英語のドキュメントばかりが出てきます。モニターの前で、独りで途方に暮れた夜も少なくありませんでした。

実務データの落とし穴と学習の近道

Windows特有の「文字コード問題」にも、大きく苦しめられました。CSVを読み込む際、SJISの影響で文字化けが発生してしまうのです。これらはプログラミングの文法より、実務特有の落とし穴でした。独学で乗り越えるには、相当な根気と時間が必要になります。体系的に学ぶなら、実務に特化した書籍を頼るのが一番の近道です。また、エラーの解決方法をプロに相談できる環境も重要です。Amazonで評判の良い本を片手に、試行錯誤を繰り返しました。プログラミングスクールで、直接指導を受けるのも確実な方法です。基礎をしっかりと固めることで、視界は大きく開けるはずです。

多拠点勤怠自動化:3ステップで残業激減

複雑な多拠点の勤怠集計を自動化する流れは、3つの手順に集約されます。一つ目は、jpholidayで共通の祝日ベースを確立することです。二つ目は、Excelを用いて拠点ごとの独自休日を管理することです。三つ目は、pandasを活用してデータ集計を自動化することです。この仕組みさえ構築すれば、月末の残業から確実に解放されます。

最初はエラーが続くかもしれませんが、一度作れば一生の財産になります。作成したスクリプトは、毎月正確に働き続けてくれるからです。月末のコピペ作業に疲れているなら、ぜひ一歩踏み出してください。pandasによる自動化の記事も、併せて読んでいただければ幸いです。あなたの机にある山のようなファイルも、必ず一掃できるはずです。

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

無料プレゼント

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

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

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

¥980 ミニキット

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

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

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

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

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

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

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

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

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

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

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

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

1問だけ回答する