会社が導入したRPAがまた使えなかったので、今度はPython+生成AIで自動化したら、前回ひと月近くかかったものが1日で片付いた話|勤怠データ集計・完全自動化の記録

エピソード9で書いた。「会社が導入したRPAが対応外だったので。RaspberryPiとPythonで自作した話」——あれはひと月近くかかった。生成AIなし、ひたすらGoogle、何度も詰んです。

今回も、出発点は同じだった。会社のRPAが使えない。でも手元には、あのときなかったものがある。

BizRobo!自動化への挑戦、内外の壁

まず、我が社にはBizRobo!がある。正確には「ある」だけで、使えるかどうかは別の話です。

毎月、決まった作業がある。勤怠管理クラウドサービスからCSVをダウンロードして、集計して。会議用フォーマットに整えて提出する。繰り返し、毎月、手で。「これ、BizRobo!でいけないか」と思うのは自然な流れだった。

最初にDesign Studioを触った。操作を覚えて、設定して、実行してみた。動かなかった。対象のシステムに対応していないという。またか、と思った。前回もそうだった。

次に、とにかく、画面の操作が全く通らない。最初は「セレクタの指定が甘いのか?」と思い、XPathを微調整。それでもダメなので待機時間を延ばしたりした。どれだけ手を変え品を変えアプローチしても。まるで透明な壁に阻まれているかのようにピクリとも動かない。おそらく、システム側でRPA(bot)からの操作を強力に弾いているのだと思う。

情シス非推奨、DAの希望潰える

「次こそはいけるかも…」という淡い期待を何度も打ち砕かれ、気づけば丸半日が経過。画面を睨み続けた末に「これは絶対無理だ」と悟ったときの。あの底知れぬ徒労感といったらない。完全に心が折れた。

ただ、調べているうちにDesktop Automationの存在を知った。BizRobo!の中にある別の機能で、より幅広いシステムに対応できるらしい。これならいけるかもしれない——そう思って情報システム部に確認を取った。

一方で、「動かないからやめておいたほうがいいですよ」

Webブラウザからの操作が全滅し。残された最後の一手として「DA(Desktop Automation)ならいけるのでは」と閃いた。画像認識や物理的なマウス操作の模倣なら、どんな強固なシステムも突破できるはず。一縷の望みを胸に、すぐさま情報システム部へ相談に駆け込んです。

返ってきたのは「DAは解像度などの環境依存が激しくてすぐ止まる。運用が不安定になるから、悪いことは言わない。やめておいたほうがいい」という非情な宣告だった。

情シスの壁、RPA絶望

そのため、RPAの操作を拒む「システム」という外部の壁に絶望していたが。まさか社内の「情シス」という内部の壁にトドメを刺されるとは思わなかった。唯一の突破口を完全に塞がれ、目の前が真っ暗になった。

情報システム部でも調べてくれたらしいが。結論は「DAは動作が不安定だから非推奨にしている」とのことだった。BizRobo!の導入費用がどれほどだったかは知らないが。自分の業務には関係ない話だった。

毎月の不毛な勤怠集計作業

自動化したかった作業を整理するとこうなる。

  1. 勤怠管理クラウドサービスにログインし、CSVの発行を依頼してダウンロード
  2. ダウンロードしたCSVを開き、個人ごとの月次集計(総労働時間・時間外労働時間など)を算出
  3. 最新の人員表(本社人事部がファイルサーバーに定期更新)を参照し、所定の会議用フォーマットに整形して出力

しかし、毎月1時間。小さいといえば小さい。でも毎月必ず発生して、絶対に間違えられない作業というのは、地味に消耗する。

カレンダーの数字が月末に近づくたび、胃のあたりがじわじわと重くなる。バラバラの形式で提出されたデータを整形し。VLOOKUPの参照範囲をちまちまと修正する。数式のズレを見つけては溜息をつき、合わない合計時間を探して画面を睨みつける時間は。まさに「無の境地」です。

「また今月も、この不毛な作業に1時間を溶かすのか」——その思いが頭をよぎるたび。自分の専門性やスキルの使いどころを間違えているような。やるせない徒労感に襲われる。保存ボタンを押して資料が完成したとき。達成感よりも先に「来月もまたこれが来る」という予報が、静かに心を削っていく。

PythonとVBA、連携の壁と3日間の苦闘

さらに、RPAが使えないと分かった時点で、方針は決まっていた。PythonとExcelVBAで自分で作る。前回と同じ構図です。

分担はこうした。Pythonが勤怠管理クラウドサービスへのログイン・CSV発行依頼・ダウンロードを担う。ExcelVBAがCSVの集計・人員表の参照・会議フォーマットへの整形・出力を担う。

個別に動かすこと自体はそれほど難しくなかった。Pythonのブラウザ操作はエピソード9でやっていたし、VBAも長く書いてきた。単体テストは全部通った。

まず、問題は、「繋げる」ところにあった。

Pythonが落としたCSVをVBAが拾う。人員表は更新されるたびにファイル名が変わる。テキスト形式の日付が入ったセルを読み取って。最新ファイルを自動で特定する必要がある。処理の順序、ファイルパスの受け渡し、日付判定のロジック——一つ一つは解けても。全部繋がらありません。

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

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

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

マクロ開発3日間の深まる迷宮

期間にして、およそ3日間。1日目は「いける!」と鼻息荒く着手し、断片的なコードを繋ぎ合わせた。2日目は特定の条件下でマクロが止まる現象に悩まされ、ネットの掲示板を漁り。深夜まで微修正を繰り返すが解決の糸口が見えない。3日目には迷宮入り。昨日は動いたはずの部分まで動かなくなり。頭の中はスパゲッティコード以上にぐちゃぐちゃだった。

次に、「結局、手でやった方が早いんじゃないか?」という悪魔の囁きと。ここまで費やした時間を無駄にしたくない意地。パズルの最後の数ピースがどうしてもはまらないような、もどかしく。孤独な戦いだった。

前回のひと月近くを思い出していた。あのときも、単体は動いた。繋げるところで詰まり続けた。

GeminiによるVBA「背骨」生成、一日の劇的解決

今回違ったのは、Geminiがあったことです。

一方で、詰まっているコードをそのまま貼った。「Pythonが出力したCSVをVBAで処理したい。人員表はテキスト形式の日付でファイルを特定する必要がある。全工程を繋いでほしい」——大まかにそういう内容を投げた。

返ってきたコードは、自分では書けなかった部分を埋めていた。

特に助かったのがExtractDate関数だ。人員表のN1セルには「4月8日」のようなテキストが入っている。これをVBAで日付として扱うには。文字列から月と日を抜き出してyyyy/mm/dd形式に変換する処理が必要だった。正規表現は使わず。InStrMidで「月」「日」の文字位置を基準に分解する——こういう発想が。自分だけだとなかなか出てこありません。

そのため、暗礁に乗り上げていた3日間、視界を塞いでいた霧が一瞬で晴れた。自分が書いたツギハギの命令文とは明らかに違う、洗練されたロジック。複雑に絡み合っていたループ処理や条件分岐が。驚くほどシンプルに整理されてそこにあった。

コードの背骨、システムの躍動

「これだ……これなら全部が繋がる」

バラバラだった個々の機能が、このコードという「背骨」を通すことで。ひとつの大きなシステムとして躍動し始める。ネットの断片的な情報を繋ぎ合わせても辿り着けなかった「正解」が。対話の中からスッと現れた瞬間だった。

しかし、繋がった。1日で。

勤怠管理自動化の仕組み

最終的な構成はこうなった。

  1. Pythonが勤怠管理クラウドサービスにアクセスし、CSVの発行依頼からダウンロードまでを実行
  2. ExcelVBAが起動し、指定フォルダから最新CSVを自動検出
  3. ファイルサーバー上の人員表Excelを走査し、N1セルのテキスト日付(「○月○日」形式)からExtractDate関数で年月日を抽出、最新ファイルを自動特定
  4. CSVデータを集計(総労働時間・時間外労働時間等)して人員表と突合
  5. 会議用フォーマットのExcelに整形・出力

実行は1クリック。完了まで3分。

さらに、人員表の自動特定ロジックが地味に気に入っている。毎月本社人事部がファイルを更新するたびにファイル名が変わるのだが。こちらは何もしなくていい。「前月25日以降に更新されたもの」という条件でフォルダを走査して。テキスト日付を読み取って最新を自動で選ぶ。

生成AIが解いたRPAの「繋ぎ目

エピソード9では書いた。XPathで3日、メール本文のURL抽出で何日も、全体でひと月近く。生成AIがない時代の記録として残している。

今回も、VBAの繋ぎ込みだけで3日間詰まった。個々の処理は動くのに全工程が繋がらない——前回と同じ壁だ。しかしGeminiに「全工程を繋いでほしい」と相談してからは。たった1日で解決した。

まず、同じ「RPA失敗→Python自作」という構図で、同じ壁にぶつかった。違いはGeminiに聞けたことだけ、と言っていい。

震える指先で「実行」ボタンをクリックした数秒後。画面上のセルが生き物のように動き出し、一瞬で資料が組み上がった。時計の針は、まだ3分も進んでいない。かつて1時間を費やし、神経を磨り減らしながら行っていた作業が。嘘のように「終わってしまった」。

AIが紡ぐフロー、時間短縮の歓び

喉の奥から込み上げる歓喜。それは単なる作業効率化の喜びではなく、3日間の迷走、エラーとの格闘。そして自分への疑念をすべて跳ね返した「証明」の瞬間だった。1時間という重苦しい「義務」が、わずか3分の「結果」に変わった。視界がパッと開けたような開放感とともに、これまで手作業に奪われていた自分の時間が。ようやく自分のもとに返ってきたのだと実感した。

次に、生成AIが得意なのは「単体を作ること」じゃない、と最近思う。それなりに調べれば、単体の処理は自分でも書ける。生成AIが本当に効くのは「繋ぎ目」だ。AとBは動く。でもAからBへ渡すところが分からない——そこに「全工程を繋いでくれ」と投げると。自分では思いつかなかった発想が返ってくる。

前回ひと月近くかかったのは、そこを一人でやっていたからです。

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

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

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

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

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