社員台帳、手入力が生む脆弱性

月末の金曜日、夕方17時。営業部の新入社員のメールアドレスが間違って登録されていると同部署のマネージャーから怒りのチャットが飛んできた。慌ててファイルサーバーの奥深くにある「社員台帳_最新_202X年修正版.xlsx」を開くと。キーボードの「1」と「l」を打ち間違えていた。冷や汗をかきながら修正し、関係各所に謝罪メールを打っただけで1時間が消えた。
従業員規模30名前後の会社。入社や異動、あるいは退社が発生するたびに。人事担当者がExcelの社員台帳を手動で開いて更新をかける。入社日・氏名・所属部署・役職・メールアドレス・緊急連絡先など。12列以上に渡るデータを紙の入社書類を見ながら転記していく作業だ。月に複数名の入退社がある月は、台帳の更新漏れや入力ミスが常態化する。手作業による転記は人間の集中力に依存しすぎる。
情報システムの根幹となるマスタデータが。誰かの手入力で毎回上書きされている状況は非常に脆い。
紙業務の無駄解消、デジタル入力へ
まず、紙の申請書ベースの手続きは、驚くほど無駄が多い。入社者が紙に手書きする時間がかかる。受け取った人事がそれをExcelに転記する。入力ミスがないかを確認し、間違っていれば修正する。こうした三段階の隠れコスト構造が水面下で存在している。手入力の限界は退社処理においてさらに深刻な事態を招く。繁忙期になると「退社済み」フラグを立て忘れるミスが頻発する。台帳にデータが残り続ける。結果として。
社内の重要なメーリングリストに退職者のアドレスが含まれたままになるという実害につながっていた。

解決策は至ってシンプルだ。入力の入り口をデジタルに一本化する。入社者自身にGoogleフォームで氏名・生年月日・住所・緊急連絡先・最寄り駅などを直接入力してもらう仕組みに変更した。ポイントは自由入力を極力減らす設計である。所属部署や役職はプルダウンの選択式にする。これにより「営業部」と「第1営業部」のような表記ゆれによる自由入力ミスを構造的に排除できる。入力期限をフォームの説明欄に明記し。
内定通知のメールと同時にURLを送付する運用フローを確立した。情報源が最初からデジタルデータになれば。人事が紙を見ながら手で転記する作業自体が消滅する。
GASによる社員台帳データ自動化

情報の入り口が整ったら、データ格納の自動化に着手する。Googleフォームの回答は自動的にスプレッドシートに記録されるが。そのままでは単なる「回答一覧」にしかならない。欲しいのは「社員台帳」としての整形されたデータである。ここでGAS(Google Apps Script)のonFormSubmitトリガーを活用する。入社情報フォームの送信をトリガーとして。
社員マスタ用のスプレッドシートへ自動転記する処理を実装した。現在の最大番号に1を足して社員番号を自動採番し。入社日から社歴を自動計算する処理も組み込む。所属部署マスタシートとVLOOKUPの要領で連携させ。部門コードも自動付与する仕組みにした。入社者がスマートフォンの送信ボタンを押した瞬間に裏側でGASが走り。人事の知らぬ間に完全な社員台帳の行が完成する体験は強烈です。
退社処理の自動化とフラグ管理
次に、入社処理が自動化できれば、退社処理も同じ要領で対応できる。退社申請専用のGoogleフォームを別途作成した。退社日と退社理由だけをシンプルに受け取る設計だ。ここでもGASのonFormSubmitトリガーが活躍する。フォームが送信されると。GASが社員マスタから該当する社員番号の行を検索し「在籍区分」列を「退社」に書き換える。
行そのものを完全に削除してしまうと、過去の在籍記録や各種履歴が追えなくなる。フラグ管理にすることでデータは保持しつつ。アクティブ社員のみを抽出するフィルタービューを活用すれば。最新の有効な社員一覧がいつでも閲覧できる状態を保てる。
ここで一度立ち止まって考えてみてください
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。
自動化の落とし穴

フォームを全社展開した初週、社員マスタを覗いて血の気が引いた。まったく同じ新入社員のデータが2行並んでいたのだ。本人が不安になってスマホから2回「送信」ボタンを連打したらしい。それに気づかず。IT部門が2行分のGoogle Workspaceアカウントとライセンスを発行してしまい。後から課金取り消しのための煩雑な申請手続きをする羽目になった。
自動化の落とし穴は、プログラムが「指示されたことしかやらない」点にある。GASはフォームから受け取ったデータを、ただ愚直にシートの末尾へ追記していく。重複チェックの仕組みが存在しなければ、同じ人が何度送信しても。そのたびに同じデータが延々と蓄積してしまう。入力値を無条件に信頼して台帳へ流し込む設計がいかに危険であるかを。実稼働して初めて痛感した。エラーハンドリングのない自動化は。
手作業よりタチの悪い事故を引き起こす原因になる。
GASコード刷新と堅牢化
一方で、この教訓を活かし、GASのコードを根本的に書き直した。単に追記するのではなく、書き込む前に既存データとの照合処理を挟む。送信データの「氏名」と「入社日」の組み合わせで社員マスタを検索し。すでに同一レコードが存在する場合は転記をスキップする仕組みにした。異常を検知した際はGmailApp.sendEmailで人事担当者に警告メールを飛ばす処理を追加する。社員番号の採番ロジックも修正を施した。
「現在の最大値+1」という単純な計算では。途中に退職による欠番や手動削除の行があった場合に連番が狂う。すべての社員番号配列を取得し。Math.maxで真の最大値を求めてから採番する堅牢なロジックに変更した。本番環境へデプロイする前には。Logger.logを仕込んでドライランで空回し検証を必ず行う運用ルールも確立した。GASをもっと体系的に学びたい場合は。
Amazonで実務向けのGAS解説書を手に取るのが早道だ。侍エンジニアのようなマンツーマン指導型スクールで実践形式で身につける方法も。確実なスキル習得の選択肢として挙げられる。
胃痛解消!マスタ自動化:効率と完璧なデータ

以前は月末になると「マスタ更新終わった?」と各部署から急かされるプレッシャーで胃が痛かった。自動化から3ヶ月後、いつものようにマスタを開くと。すでに昨日入社したメンバーの情報が寸分の狂いもなく登録され。社員番号が綺麗に並んでいた。誰も触っていないのに完璧に整理されたシートを見た時。肩の荷が下りるのを物理的に感じた。
自動化の成果は数字として明確に表れた。従来の手作業では、紙記入15分、転記20分、確認修正に平均30分かかっていた。これが10名分重なれば月次で約3時間もの拘束時間となる。自動化後は、フォームURLの送付に1分、システムが処理した後の最終確認に5分。合計6分で完結するようになった。最大の副産物は、台帳の更新漏れが完全にゼロになったことだ。退社フラグも即座に反映されるため。
メーリングリストから退職者が自動除外される運用も定着した。他部署のマネージャーからも「人事データの照会がいつでも最新で助かる」という声が届くようになった。
GoogleフォームとGASによる社員台帳自動化
そのため、社員台帳の自動更新は、適切な手順を踏めば誰でも構築できる。Googleフォームで入社・退社情報の受け口を統一し。プルダウンを活用して入力ミスを構造的に防ぐ。これが最初のステップだ。GASのonFormSubmitトリガーを使い、社員マスタへ自動転記を行う。社員番号の自動採番や退社フラグの更新もここで完結させる。最後の仕上げとして、GAS側で重複チェックのロジックを組み込み。
二重登録を防ぎつつ警告メールで人事担当者に通知する仕組みを担保する。この3ステップを実装するだけで。月次の煩わしい手転記作業をほぼゼロに削ぎ落とせる。会社の規模がさらに大きくなり。人事データが複雑化してくればSmartHRのようなクラウド人事システムへの移行を検討するフェーズが来る。それまでの間、スプレッドシートとGASの組み合わせは最強のつなぎとして機能する。
経費精算フローの自動化(経費精算×GoogleフォームとGASの記事)やアンケート集計の効率化(アンケート集計×GoogleフォームとGASの記事)と合わせて。身近な業務を一つずつ手放していってほしい。
関連リンクとチェックリスト
この重複問題は、自動化を考える上で非常に重要な教訓となりました。そこで、GASのプログラムに「重複チェック機能」を追加することにしました。具体的には、フォームから送信された氏名と生年月日をキーとして、既存の社員マスタに同じ組み合わせのデータがないかを確認する処理を組み込みました。もし重複が検出された場合は、新しいデータとして追加せずに、既存のデータを更新する、あるいはエラーログを出力して人事担当者に通知する、といった分岐処理を実装したのです。
この重複チェックの導入により、意図しないデータ重複を防ぎ、社員マスタの正確性を飛躍的に向上させることができました。また、単にデータを追加するだけでなく、既存のデータを更新するロジックを実装することで、入社後の情報変更(例えば部署異動や氏名変更など)にも対応できるようになり、自動化の柔軟性が格段に上がったと感じています。プログラミングの「プの字」も知らなかった私にとって、この「条件分岐」という概念を理解し、実装できたことは、大きな一歩だったと思います。プログラムはただ機械的に動くのではなく、状況に応じて賢く判断させることで、より実用的なツールになることを実感しました。
さらに、自動化を進める上で見えてきた課題が「権限管理」でした
さらに、自動化を進める上で見えてきた課題が「権限管理」でした。社員台帳は個人情報のかたまりですので、アクセスできる人を限定する必要があります。Google Workspaceの機能として、スプレッドシートの閲覧・編集権限を細かく設定できることは知っていましたが、GASで自動的に書き換えられるデータに対して、どこまで権限設定を厳しくすべきか、当初は悩みました。結果的には、GASの実行権限を特定のサービスアカウントに限定し、そのサービスアカウントだけが社員マスタへの書き込みを許可されるように設定しました。これにより、誤って誰かがシートを直接編集してしまったり、悪意のある変更が加えられたりするリスクを最小限に抑えることができました。
また、自動化によって業務が効率化される一方で
また、自動化によって業務が効率化される一方で、万が一システム障害が発生した場合の「バックアップ体制」も考慮する必要があると痛感しました。GASが予期せぬエラーで停止してしまったり、誤ったデータが書き込まれてしまったりする可能性もゼロではありません。そこで、社員マスタのスプレッドシートは毎日自動的にコピーを作成し、別フォルダに保存する仕組みをGASで構築しました。これにより、もしもの時でも、直近の正常な状態にデータを復元できる安心感が生まれました。完全文系の私にとって、システム設計の視点を持つことは新鮮で、プログラミングは単にコードを書くことだけでなく、運用全体をデザインすることなのだと気づかされました。
この一連の取り組みを通じて、私はプログラミングの知識がゼロの状態から、実際に業務を自動化するツールを開発できるようになりました。一番の収穫は、目の前の「面倒だな」と感じる作業を「どうすれば自動化できるだろう?」という視点で捉え直す思考回路が身についたことです。以前は「仕方ない」と諦めていた手作業の多くが、実はプログラミングで解決できる課題だったのです。そして、その解決策を自分の手で作り出せるようになったことは、事務職としての自信にも繋がりました。
プログラミングは、決して専門家だけのものではありません
プログラミングは、決して専門家だけのものではありません。私のような完全文系の事務職でも、日々の業務改善のために、Google Apps Scriptのような手軽なツールから始めることができます。最初は小さな一歩かもしれませんが、その一歩が、日々の業務を劇的に変え、そして自分自身のキャリアを大きく広げる可能性を秘めていると、私は心から信じています。
著者はこうして解決の糸口を見つけた
著者も同じ境遇から始まりました。独学でここまで自動化した道のりを参考にしてみてください。
学習サービスとアンケート
このスキルを活かしてさらに前へ進むなら
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

