不定期に出社するテレワーカー用に出社日報告フォームを作ってみた

3分を30病にするための下準備に一時間かかってます


今週もすっげーヤダけど仕方なく出勤してきました。
出勤じたいもイヤなのですが、付随する作業も面倒だな。と思っていたのがコレ。
私の職場では、週単位で翌週の予定を報告するルールがあります。
こんな感じに。
週課の予定報告

これ、毎週送るのが面倒なんですよね。
私は毎週●曜日は出社と決めているわけではないので特に。

テンプレート作っておけばいいじゃん。と思われるかもしれません。

このメールをそのままテンプレートにして使うとしても、毎回書き換えないといけない箇所が3つもあります。
  1. 件名に書いている日付
  2. 本文に書いている日付
  3. それぞれの日の予定(出社、テレワーク、休暇etc)
どこか一箇所でも書き換えを忘れると再送です。めんどくせえ。

めんどくさいを解消する方法を考え、
報告フォームを作り
フォームから、翌週の「出社する日」「休む日がある場合、いつ休むのか」を送ったら
メールを作って送ってくれる
という仕組みを作りました。

このフォームの質問に答えていくと
予定報告フォームを作った

あのメールになります。
フォームを埋めてメールを作る


メールの作成には、Microsoftの自動化サービス「Power Automate」を使いました。
私のTwitterアカウントを「日刊神戸のお嬢様」に改造したアイツです。
特定のユーザがつぶやく内容に応じて通知を受け取る方法

特定のユーザがつぶやく内容に応じて通知を受け取る方法

Twitterの通知は、通知をオンにした相手がつぶやく内容に応じて通知する・しないを分けることができません。●●さんが××の話をしているツイートだけ通知してほしい。全通知はいらない。そんなワガママも、Microsoft Power Automateなら叶えてくれます。



報告フォームとPowerAutomateくんの連携で、1が起こると23が自動で始まります。
私の仕事は1だけ。
  1. 報告フォームから、翌週の出勤する日(と、あれば休む日)を送信する
  2. プレッドの翌週一週間分の予定表を作る
  3. 予定表をメールで送る
1のフォームを作る作業と、2と3をやらせるための下準備が面倒なのですが、それは一度だけ。
下準備さえ済ませてしまえば後は楽になります。

この記事はこんな方におすすめ→

  • 出社orテレワークの予定を、定期的に報告する相手がいる
  • 出社する(テレワークする)曜日を固定していない
  • 手での報告が面倒


この記事で分かること→

Microsofot FormsとPower Automateを組み合わせて使って、報告メールを送るためのメールフォームを作る方法




はじめに前提条件

これから作る予定報告フォームは以下の前提条件で作ります。
  • 仕事をするのは毎週月曜日から金曜日
  • 月~金のどこか一日だけ出社する
  • 出社する曜日は固定しない
  • 出社しない日はテレワーク
  • 不定期に休暇を取る
  • 月~金の祝日(会社は休み)は考慮しない
前提条件を変える場合は(一日だけテレワークにするとか)
Microsoft Formの中身、PowerAutomateにやらせる動きを変えてください。

祝日は、あっても年数会のことなのに毎週「来週は祝日がない」って考えるのがめんどくさいので、考慮するのをやめました。


予定報告フォームの作り方

PowerAutomateくんに私の予定を教えてあげるため、まずは予定報告フォームを作ります。Microsoft Formsを使って作りました。
Microsoft Forms自体の使い方はとても簡単で、はじめてでも画面を見たままで作っていけます。
Google Formsとか、他社製品を使ったことがあればなおさら。

おさらいがてら作り方を記載していきます。
今回は設問がかんたんなので、スマホで十分作れます。

まずはhttps://forms.office.com/ へアクセスし、Microsoftアカウントでログインします。
アカウントがなければその場で作成できます。

ログインしたら「新しいフォーム」から新規のフォームを作ります。
Microsoft Forms新しいフォーム


①フォームのタイトルを決める

「無題のフォーム」となっているところはフォームのタイトルです。
何をやるために使うフォームなのか、パッと見てわかる名前にしておけば良いと思います。
「+新規追加」を押して質問を設定していきます。
Microsoft Forms新規のフォーム作成


②月曜日の日付をPowerAutomateに教えてあげる

「+新規追加」を押すと追加する質問の種類を選べます。
「日付」を選びます。
Microsoft Formsの質問は「日付」を選ぶ

「質問」を書き換えます。
まずPowerAutomateくんに教えてあげたいのは、「あなたに伝えるのは●月●日(月)からx日(金)までの予定ですよ」ということ。
「●月●日(月)」がいつなのか、フォームを使ってPowerAutomateくんに教えてあげます。
よって、まずは月曜日の日付はいつなの? を聞く質問を作ります。
Microsoft Formsで日付を聞く

火曜日から金曜日の日付は、後でPowerAutomateくんに計算させます。

必ず聞きたい質問は「必須」をオンにしておきましょう。
「必須」をオンにすると回答をすっ飛ばせません。
必ず聞きたい質問は「必須」をオンにする


③いつ出勤するのかPowerAutomateに教えてあげる

質問を設定できたら「+新規追加」を押して次の質問を作ります。
また質問の種類を「日付」にして、今度は出勤する日を聞きます。
Microsoft Formで出勤日を聞く


④休暇を取るのか取らないのか、PowerAutomateに教えてあげる

「+新規追加」を押して次の質問を作ります。
次に選ぶのは「選択肢」です。
Microsoft Forms「選択肢」

前の質問で、PowerAutomateくんに月曜日の日付を教えてあげました。
その月曜日から金曜日の間に、休暇を取る日はあるの? もPowerAutomateくんに教えてあげます。
Micirosoft Formsで休暇の有無を聞く

質問を作ったら「+新規追加」します。

休暇を取るのか聞いたら、今度は、じゃあいつ取るの? も聞かないとです。
質問の種類を「日付」にして、休む日を聞きます。
Microsoft Formsで休む日を聞く


ここで、前に作った質問「休む日ある?」に戻ります。
いつ休むのかは、休む日がない週は聞く必要がありません。
休む日が「ある」と回答したときだけ、いつ休むかを聞く。
休む日が「ない」場合はこれ以上何も聞かない。ができるようにします。

「必須」の右隣の「・・・」を押して「分岐を追加する」をやっておきます。
Microsoft Formsの質問に分岐を作る

Microsoft Formsで分岐を作る

Microsoft Formsで分岐を作る


分岐を作ったら「戻る」を押して、質問を作る画面へ戻ります。
Microsoft Formsの分岐を作ったら「戻る」

これで、PowerAutomateくんに私の予定を教えてあげるために必要な質問を設定できました。


作ったフォームをチェックしよう

できたフォームは「プレビュー」で実際の回答画面のレイアウトを確認できます。
しっくり来ないな…と思った箇所があったら変えておきます。
「スタイル」を選ぶと背景の色、デザインを変更できます。
Microsoft Formsのプレビューを見ておこう


フォームが完成したら、「回答の収集」を押してフォームに回答する時のURLを取得しておきます。
私はここでコピーしたURLを、会社のPCのブラウザにブックマークしています。
Microsoft Forms回答フォームのURLを取っておく


PowerAutomateフローの作り方

ここからはPowerAutomateの出番です。
スマホのPowerAutomateは見にくいので、パソコンで操作がオススメ

報告フォームで埋めた内容を基に

①PowerAutomateが動き出すトリガーを決める
②予定を連絡するメッセージの文面を作る
  • 作った文面を送信
をやってもらうフローを作ります。
日刊たんたんさんを作ったときはテンプレートを使いましたが、今回は新規に一から作ってみます。

まずはMicrosoftアカウントでPowerAutomaeへログインします。

Microsoftアカウントを持っていない場合は作成します。

画面の指示通りにログインを進めたら、[+作成」をクリックします。

PowerAutomateにログインして、新規のフローを「作成」する


①フローが動き出すトリガーの種類を決める


トリガーというのはPowerAutomateが仕事を始めるきっかけのことです。

特定のイベントが起きた時?

指定した時刻になったら?

つど、手動で指令を送る?

きっかけはいろいろ設定できます。

今回は特定のイベント=作っておいたフォームから予定を送った が起きた時に働いてほしいので「自動化したクラウドフロー」を選びます。

PowerAutomateが動き出すトリガーを決める



次の画面でフロー名を決めます。

フロー名は、何をやっているのか端的に表せればいいでしょう。文章でも構いません。

フロー名を入力した欄の下は検索ボックスになっています。

ここでは、何が起こったらPowerAutomateが動き出すの? の「何が」を決めます。

「Microsoft Forms」と入力して「何が起こったら」の候補を絞り込みます。

「新しい応答が送信されるとき」を選んでください。


フロー名とトリガーを選ぶ画面をスクロールすると「作成」があります。

フロー名を決め、トリガーを選んだら「作成」を押して次へ。



②Microsoft FormsからPowerAutomateに情報を渡す

いよいよフローを作り込んでいきます。
まず先頭に来ているのは、フローが動くトリガーです。
PowerAutomateが動くトリガーは「新しい応答が送信されるとき」

「新しいステップ」をクリックして次の動きを指定します。
PowerAutomateの次の動きを「新しいステップ」を押して決める

なんかすげえいっぱい出てきました。
この画面では、PowerAutomateと連携しているシステムたちから
何のシステムを選んで
何をさせるのか
命令を作ります。
検索ボックスに「Microsoft Forms」と入力し「何を選んで」の部分を絞り込みます。
「Microsoft Forms」がヒットするのでそれをクリック。
PowerAutomateと連携しているシステム二何をさせるのか決める

「応答の詳細を取得する」を選びます。
この時点では、私が送った予定の情報はMicrosoft Formsが持っています。
この操作によって、FormsからPowerAutomateに情報が渡ります。
「応答の詳細を取得する」でPowerAutomateにフォームの回答を渡す


③PowerAutomateが時刻を勘違いしているので、誤解を解く

ここからは、Microsoft Formsからゲットした情報を加工していきます。
フォームから月曜日の日付は送っているので、それを基に火曜日、水曜日…の日付を計算していく…前にやることがあります。
PowerAutomateくんてば、プレッドがフォームから送った日付を日本時間だと思っていません。
フォームから送った日付を、日本時間に読み替えるよう言ってあげないとです。

ふたたび「新しいステップ」をクリックして
PowerAutomateの「新しいステップ」

今度は「日時」で検索し、「タイムゾーンの変換」を選びます。
PowerAutomateが入手した日付を「タイムゾーンの変換」で日本時間に変える


「基準時間」にカーソルを当てると(または、「動的なコンテンツの追加」をクリックすると、Microsoft Formsから受け取ったデータを扱えるようになります。
「月曜日の日付」を選択します。
PowerAutomateが時間を誤解しているので、日本時間に変換してあげる


他の箇所は以下の通り、埋めました。
基準時間 月曜日の日付
書式設定文字列 MM月dd日
変換元のタイムゾーン 協定世界日時
変換先のタイムゾーン UTC+9:00 大阪、札幌、東京

書式設定文字列」は日付を「6月12日」と書くか「6/12」と書くかという違いなので、お好みで。
協定世界日時が2種類ありますが、私が使っているのは「協定世界日時-11」の方です。
PowerAutomateがどっちを使っているか分かっていません。(私が)
時差9時間でも11時間でも日付は一緒でしょ。と思ってここはテキトーです。
何時何分までの時間も正確に計算しようと思うと、そうはいかないのですが。


<Point!>

「タイムゾーンの変換」の右に出ている・・・をクリックすると「名前の変更」を選べます。

何のタイムゾーンを変えているか分かるよう、名前を変えておくことをオススメします。

なぜならこの後の工程で、

月曜日の日付に+1して火曜日の日付を計算する

火曜日の日付を日本時間に変える

月曜日の日付に+nして●曜日の日付を計算する

●曜日の日付を日本時間に変える

をやっていくから。

同じ操作が続くので、どこで何をやっているのか分かりやすくしておかないと、わけが分からなくなります。


⑤火曜日から金曜日の日付を計算せよ

さて、月曜日の日付を日本時間に直すことができました。
月曜日の日付に+1して火曜日の日付を出します。
やっぱり協定世界日時が出てくるので、これも日本時間に直します。

「新しいステップ」を押す→「日時」で検索→「時間への追加」を選びます。
「新しいステップ」を押してPowerAutomateがやることを足す
「時間への追加」を使って月曜日の日付に+1していく

今度の基準時間は月曜日の「変換後の時間」です。
これに+1日して火曜日の日付を出します。
「時間への追加」で月曜日の日付に+1すると、火曜日の日付になる

「タイムゾーンの変換」をもういちど使います。
基準時間を火曜日の「算出時間」にして、協定世界時から日本時間へ変換します。
「タイムゾーンの変換」を使って、火曜日の日付も日本時間に変換する


月曜日の日付に+nして日本時間に直すのを繰り返して、水曜日から金曜日の日付も出します。
+2して水曜日
+3して木曜日
+4して金曜日
もう何もかも誤解しているので、地道にひとつずつ誤解を解いていきます。
「時間への追加」「タイムゾーンの変換」を使って水曜日から金曜日の日付をも出す

「時間への追加」「タイムゾーンの変換」を使って水曜日から金曜日の日付をも出す
「時間への追加」「タイムゾーンの変換」を使って水曜日から金曜日の日付をも出す


そろそろ疲れてきた

これで終わり! と言いたいところですがまだ準備段階です。
しかも、まだPowerAutomateくんが五回している部分が残っています。
出勤する日も「タイムゾーンの変換」を使って協定世界時から日本時間へ変えておきます。
「タイムゾーンの変換」を使って出勤する日も日本時間に変える

⑥変数を作る

次は「変数」を使います。
Microsoft Formsから送った回答は、出社する曜日が毎回変わります。
休む曜日もあります。
Microsoft Formsから「●月×日(月)はテレワークで、次の▲日(火)は出社」と送っても、
PowerAutomateが作るメールの文面が「月曜日は出社」で固定されてしまうと困る訳です。

そもそも毎週●曜日に出勤て決めていたら、このフォームもPowerAutomateもいらねえんだよ


固定されてしまうと困る値を表現するために使うのが変数です。
PowerAutomateにはこういう文面のメールを送ってね。と教えておいて
PowerAutomateの変数は、固定されてしまうと困る値の定義に使う

Microsoft Formsから受け取った回答に応じて、変数1~5の中身を「出社」「テレワーク」「休暇」に書き換えられるようにしておきます。
本格的にプログラミングやるのでもなければ、ここの理解は大雑把でいいと思います。
私は「数学の方程式で出て来た代数xの文章バージョン」「状況に応じていい感じに中身を書き換えてくれる便利な子」と、割とテキトーな理解をしています。

そんな変数をPowerAutomateで使うには、例によって「新しいステップ」から
「新しいステップ」からPowerAutomateがやることを足す

「変数」で検索し、「変数の初期化」を選びます。
PowerAutomateの「変数の初期化」を選ぶ

ここでやるのは「月曜日」という名前の変数を作るよ! と宣言するだけです。

名前 月曜日
種類 文字列(文章を入れるので)
値  空白
と入れ、命名の儀を行います。
値が空白なのは、後の工程で「出社」「テレワーク」「休暇」を嵌めるからです。
PowerAutomateの「変数の初期化」で変数の名前を決める

「月曜日」という名前の変数を作ったら、同じ要領でを火曜日から金曜日までと、メールの件名と本文で使う分、合計で7つの変数を作ります。
PowerAutomateの「変数の初期化」を使って火曜日から金曜日まで、件名、本文の変数を作る
PowerAutomateの「変数の初期化」を使って火曜日から金曜日まで、件名、本文の変数を作る

⑦休暇を取るか取らないかで、やることを変える

変数を作ったら「新しいステップ」で次の動きを決めます。
次は休暇を取る日を日本時間に変えます。
が、休暇は取る週と取らない週があるので、休暇を取る週だけ、休暇の日を日本時間に変える動きをさせます。
つまりこういうこと。
休む日があるときだけ、休む日の日本時間を取得する。休まないときは何もしない。


条件によってやることを変える処理もPowerAutomateで実現できます。
「新しいステップ」を押して
「新しいステップ」からPowerAutomateがやることを足す

「条件」というキーワードで検索して「コントロール」を選びます。
PowerAutomateの操作を「条件」というキーワードで検索する


「コントロール」の中に「条件」がいます。
Microsoft Formsで
Microsoft Formsの質問「休む日ある?」

という質問を作っておいたので、PowerAutomateで設定する条件はこうなります。
PowerAutomateの「条件」で休む日があるかを聞く

Microsoft Formsでは、休む日ある?→Yes と回答した場合、
次の質問「いつ休む?」で休む日付を聞きました。
Formsで聞いておいた日付を、「タイムゾーンの変換」を使って日本時間に変換します。
「アクションの追加」を押します。
「はい」の場合は「アクションの追加」を行う

「タイムゾーンの変換」を使って休む日を日本時間に変換します。
PowerAutomateが取得した休む日を、日本時間に変換する


「いいえ」の場合は何もしません。

⑧月曜日~金曜日の変数に「出社」「休暇」「テレワーク」を嵌めていく


もうしばらく「条件」の使用が続きます。
ここが一番めんどくさいです。
でもここを乗り切れば、毎週メール手打ちから逃れられるのでがんばってください。

次の作る分岐はこれ。お察しの通り月曜日から金曜日の分まで、×5個作ります。
月曜日から金曜日の5日分、分岐を作る


がんばってやっていきましょう。

「条件」を使って月曜日の「変換後の時間」と出勤する日の「変換後の時間」を比べ、等しいかどうかを見ます。
月曜日の日付と出勤する日を比べ、等しいかチェックする

「はい」だったら=等しかったら、「アクションの追加」を押します。
分岐が「はい」だったら「アクションの追加」を行う

「新しいステップ」を押した時と同じく、操作を検索する画面が出て来ます。
「変数」で検索し「文字列変数に追加」を選択します。
「文字列変数に追加」が変数に値をはめる操作です。
「文字列変数に追加」が変数に値をはめるため「文字列変数に追加」する

変数の「名前」は、前の工程で命名しておいた変数たちの中から選びます。
「月曜日」を選びます。
変数の名前を選ぶ
選んだ変数に嵌める「値」を決めます。
“月曜日の「変換後の時間」(月) 出社“という文言にしました。
「文字列変数に追加」して変数に嵌める値を作る

「変換後の時間」は「動的なコンテンツの追加」から選びます


「いいえ」の場合は「アクションの追加」を押して「条件」を選びます。
月曜日の「変換後の時間」と休暇を取る日の「変換後の時間」を比べ、等しいかどうかを見ます。
月曜日の日付と休暇を取る日付を比べる


「はい」だったら“月曜日の「変換後の時間」(月) 休暇“という文言を「文字列変数に追加」します。
「文字列変数に追加」して変数に嵌める値を作る

「いいえ」だったら“月曜日の「変換後の時間」(月) テレワーク“という文言を「文字列変数に追加」します。
「文字列変数に追加」して変数に嵌める値を作る


これを月曜日から金曜日まで、5日分繰り返します。
5日分の分岐を作る

設定するところ、あと1つだけなのでがんばってください。


⑨予定を知らせるメールを作って送る

ここまでの工程で、予定を知らせるメールを出す下準備ができました。
いよいよメールの中身を作っていきます。
うちのメールソフトはoutlookなので「outlook」と検索し、「メールの送信」を選びます。
outlookの「メールを送信」を選ぶ


メールの宛先
メールの件名
メールの本文
を埋めます。
PowerAutomateで送るメールを作る

テストも兼ね、宛先はまず、自分のアドレスだけ入れることをお勧めします。
ちゃんと狙った通りにPowerAutomateが動くことを確認してから、後で書き換えましょう。


件名と本文はプレッドの場合は
件名に、月曜日の「変換後の時間」と金曜日の「変換後の時間」を入れ、いつからいつまでの予定なのかを分かるようにしています。
本文はひたすら ●曜日の変数<br> の羅列。
本文の<br>は改行したいという意味で入れています。

ここまでできたら「保存」して終了です。お疲れ様でした!

フローができたら動作確認をお忘れなく

フローができたら、テストとして実際にMicrosoft Formsから
テストなので架空の予定でいいです。
送る相手は自分だけにしておかないと、痛い目を見ます。
ちゃんと自分にメールが届いたことを確認してから、宛先を変えましょう。
Microsoft Formsから送った回答を元に、PowerAutomateが作ったメール

この仕組みを作るために私は昼休みを潰しました。
3分かけていた作業を30秒にするための下準備に、一時間。
費用対効果はイマイチかもしれませんが、
メールの文面を毎回打ち直すのめんどくさい!
どこか間違えたら送り直すのもめんどくさい!
この二大めんどくさいをなくせたのは、私にとっては時間短縮以上の収穫でした。
私は「めんどくさいけど一回●分で終わるならいいや」って思えないんです。
「めんどくさい」って思ったら、めんどくさい作業をやらずに済む方法を探します。
予定の報告は職場のルールで「めんどくさいからやりません」て訳にいかないので、ちょっとでも楽をする方法を考えて、こうなりました。

いちばんめんどくさいのは出社そのものなんですけどね!