Microsoft FormsとPowerAutomateで労務管理
はじめに
最近よく話題に上がるノーコード・ローコード開発ですが、Microsoft365でも実現可能になっています。今回の記事では、ノーコードなら誰でもシステム作れるのかをベースにMicrosoft FormsとPowerAutomateを組み合わせて簡易的な労務管理システムを作ってみたいと思います。
仕様
この記事で作成するのもは、まず申請者が申請フォームから必要事項を記載して送信すると、直属の上司に承認依頼が飛ぶようにします。イメージは下記の図を参照してください。

Formsを利用するのは、データ保存場所がExcelにできる点が大きいです。SharePointのカスタムリストはいろいろ自由が利く半面、5000件問題(※1)があり、例えば出勤・退勤で1日2回(2行)新しいデータが生まれるとして20日営業で考えると250名以上社員がいる会社様では1か月持たない可能性が出てきます。
※1 仕様上は3000万件登録可能ですが、5000件を超えるとビューに不具合が発生する場合があります。
今回の労務管理システムで実装する申請は以下の5つです。
- 出社時間連絡
- 退社時間連絡
- 休暇申請
- 休日出勤申請
- 残業申請
フォームの作成
皆様はMicrosoft Formsでフォームを作成する際にどこから作成しているでしょうか?フォームの作成はMicrosoft Formsの画面とOneDriveの画面のどちらでも作成が可能です。

それぞれ以下の特徴があります。使いやすい方を選択してフォームを作成してくださいね。この例ではOneDrive上でフォームを作成しています。
- Formsでフォームを作成するとExcelは毎回ダウンロードする
- OneDriveでフォームを作成するとOffice Onlineのブラウザで確認できる
ちなみにコンシューマ向けのOneDriveでは毎回ダウンロードさせられるタイプでしかフォームの作成ができないようです。
申請書の仕様は以下の通りです。それぞれセクションを分けて作成してください。入力完了後はフォームの末尾に飛ばすようにすることで、関係ない申請フォームが表示されないようにできます。

出社時間連絡の仕様
出社時間連絡では、出勤時間はマストとして、出社場所も報告するようにします。時間はフォームの登録時間で取得可能ですので、利用者の入力は不要とします。今みたいなコロナ過では毎日の体温報告を入れてもいいかもしれないですね。

退社連絡の仕様
退社の連絡は、時間以外に報告するものはないと思いますので、単純に送信ボタンを押すだけとします。出社と同じようにフォームの登録時間で退社時間を取得します。

休暇申請の仕様
休暇申請は、以下の仕様とします。代休と振休を選択した場合はさらに基になる休日出勤日を指定する方式にします。

休日出勤申請の仕様
休日出勤申請では、出勤日と出勤理由を記載する方式とします。代休・振休予定ありなしフラグを付けて予定日を入力させるようにしても良いかもしれないですね。

残業申請の仕様
残業申請は時間での入力規則が可能なら予定時間も入れたいところですが、残念ながらできないので残業理由のみを入力してもらいます。

PowerAutomate でフローの作成
この記事の例では、直属の上司に承認依頼を出します。Microsoft365のユーザ属性値には上司属性があります。この上司属性が登録されていることを前提に申請者の上司を自動取得してフローを回すように設定していきます。
PowerAutomate でデータを扱う上の大前提として、フロー上に対象のデータを読み込む必要があります。この例ではMicrosoft Formsのフォームでデータを入力しますので以下のようにデータを取得したうえで処理を実行する必要があります。
これは各ユーザの上司属性を拾う場合も同様で、ユーザのプロフィールを取得してから上司の値を拾い出す必要があります。

それでは順番に設定方法を確認していきます。まずはPowerAutomate を開いて[+作成]-[インスタントクラウドフロー]をクリックします。

この画面でFormsの選択ができないので、[スキップ]をクリックして次へ進みましょう。

検索Boxに[Forms]と入力して、表示されたFormsアイコンをクリックします。

トリガーとして、Formsが送信された場合に動作させたいので[新しい応答が送信されるとき]をクリックします。

フォームID欄で対象となるフォームを選択します。PowerAutomate でフローを作成するユーザが所有しているFormsのみが選択可能です。

続いて[新しいステップ]をクリックして、検索Boxに[Forms]と入力して表示されたFormsアイコンをクリックします。

アクションの[応答の詳細を取得する]をクリックします。これでFormsに入力された内容を取得することが可能になります。

[フォームID]と[応答ID]を入力します。フォームIDは対象のフォーム名をプルダウンから選択、応答IDは動的コンテンツから応答IDをクリックします。

次にフォームを入力したユーザの情報を取得します。[新しいステップ]をクリックして、検索Boxに[ユーザ]と入力して表示されたOffice365アイコンをクリックします。

アクションの[ユーザプロフィールの取得(V2)]をクリックします。

ユーザー(UPN)欄をクリックしてFormsアイコンの[Responders’Email]をクリックします。これでフォーム送信者のメールアドレスを取得することができます。

次にフォームを入力した上司の情報を取得します。[新しいステップ]をクリックして、検索Boxに[ユーザ]と入力して表示されたOffice365アイコンをクリックします。

アクションの[上司の取得(V2)]をクリックします。

ユーザー(UPN)欄をクリックしてOffice365アイコンの[ユーザプロフィールの取得(V2)]にある[メール]をクリックします。

次に[新しいステップ]をクリックして、検索Boxに[承認]と入力して表示された承認アイコンをクリックします。

アクションの[開始して承認を待機]をクリックします。

[承認の種類]は上司一人が承認するので[承認/拒否-最初の応答]をクリックします。
[タイトル]は、Formsの[申請種別]に文字列[の承認依頼通知]つける形で表示できるようにします。
[担当者]は、[上司の取得(V2)]から[メール]をクリックします。
[詳細]は任意入力ですが、[ユーザプロフィールの取得(V2)]から[表示名]と文字列[様より承認依頼があります。]とします。

次に[新しいステップ]をクリックして、検索Boxに[コントロール]と入力して表示されたコントロールアイコンをクリックします。

アクションの[条件]をクリックします。

左の[値の選択]に開始して承認を待機の[結果]を入力します。中央は[次の値に等しい]をクリックして、右に直接入力で[Approve]と入力します。
これで結果が承認であれば[はい]のフローへ、否認であれば[いいえ]のフローが動作します。

次に[はいの場合]の[アクションの追加]をクリックして、検索Boxに[Teams]と入力して表示されたTeamsアイコンをクリックします。

アクションの[チャットまたはチャネルでメッセージを投稿する]をクリックします。

[投稿者]は[フローボット]を選択します。
[投稿先]は[フローボットとチャットをする]を選択します。
[Recipient]は[ユーザプロフィールの取得(V2)]から[メール]を選択します。
[メッセージ]は[承認しました]とします。

ここまでで設定は完了です。あとはテストを行いましょう。テストで申請を行うと以下のようにTeamsで承認依頼が上司に飛んできます。

否認された時の処理は、承認された時の処理を参考に作ってみてくださいね。申請情報はすべてExcelに登録されていきます。人事などが労務管理する際はExcelのピボットテーブルなどを利用することで効率的に管理していただけるかと思います。
まとめ
昨今流行りのノーコード開発の例をご紹介しました。数年前はMicrosoft365でワークフローを実装しようとするとSharePointワークフローというカオスな機能を使う必要があり、一般利用者にはとても利用できるものではなく、3rdパーティ製品を導入することがほとんどでした。
ワンステップの承認フロー作るだけでどれだけ手間かかるんだと思ってしまいますが、プログラムが組めない方でもクリックしていくだけでワークフローは作成できることがわかりました。
いろいろ試してみると面白いと思いますので、どんどん使ってみてください。
それでは本記事が皆様の導入、運用管理の一助となりましたら幸いです。それではまた。