Power AutomateでTeamsに投稿された業務記録を集計する

概要

Microsoft Power Automateを仕事で使用したところ簡単な定形処理を自動実行させるのに便利でした。

Power Automate、Teams、Excelを連携させてTeamsに投稿されたメッセージをPower Automateを使って
Excelに記録する処理を作成してみます。

動作のイメージ

例として残業の業務記録メッセージを個々人がTeamsに投稿し、
Teamsに格納したExcelファイルに投稿内容を自動的に残すという形の処理を作成してみます。

1.Teamsにメッセージを投稿する

2.Teamsに格納したExcelに投稿者、投稿日、残業目的、残業時間が自動的に記録される

Teamsにテスト用チームを作成

Teamsにテスト用チームを作成します。

Teamsのチームを選択すると左下に「チームに参加、またはチームを作成」が表示されるので
クリックします。

チームを作成をクリックします。

初めからチームを作成するをクリックします。

プライベートをクリックします。

チーム名をTestに変更して作成をクリックします。

Testにメンバーを追加画面が表示されたらスキップをクリックします。

Testチームが作成されました。

記録Excelファイルの用意

Excelファイルを自分のPC上で新規作成し、ホームタブを選択します。
セルのA1:D1を選択し、テーブルとして書式設定から好きなデザインのテーブルを選択します。
例として白テーブルスタイル(淡色)8を選択しています。

テーブルスタイルを選択すると「テーブルとして書式設定」が表示されるので、OKを押します。

テーブルが作成されるので、それぞれのヘッダーの名前を変更します。

列名 設定値
A列 名前
B列 日付
C列 残業目的
D列 時間

テーブルを選択するとテーブルデザインが表示されるので、テーブル名を残業記録に変更します。

Teamsの一般チャネルのファイルを選択し、作成したExcelファイルをTeamsにアップロードします。

Power Automateの作成

トリガーの作成

Power Automateの作成画面で作成をクリックし、自動フローをクリックします。

フロー名を残業記録と入力し、フローのトリガー検索画面でteamsと入力します。
チャンネルに新しいメッセージが追加されたときを選択し、作成をクリックします。

Power Automateの編集画面が表示され、トリガーに選択した項目が表示されます。
チーム名を最初に作成したテスト用チームに変更し、チャネルをGeneralに変更します。

項目 設定値
チーム Test(リストから選択)
チャネル General(リストから選択)

アクションの作成

新しいステップをクリックします。

検索欄にhtmlと入力し、Html to textを選択します。

Info

Teamsに投稿されたメッセージにはhtmlタグが入っていて、そのまま利用すると後々の処理が複雑になってしまうため、Teamsのメッセージからhtmlタグを除いたテキストに変換します。

Html to textのContent部分をクリックすると右下に入力画面が表示されるので
メッセージ本文コンテンツをクリックします。

新しいステップをクリックします。

検索欄に変数と入力し、変数を初期化するを選択します。

アクションが追加されるので、各項目を下記のように設定します。

項目 設定値
名前 残業目的タイトル削除
種類 文字列
replace(outputs('Html_to_text')?['body'],'残業目的:', '')

replace関数は指定した文字を別の文字に置換する関数です。
Html to textアクションの結果に対して 残業目的: という文字を空白に置換しています。

項目
置換前 残業目的: A作業対応のため
残業時間:1
置換後 A作業対応のため
残業時間:1

新しいステップを追加します。
検索欄に変数と入力し、変数を初期化するを選択します。

残業目的と残業時間がくっついてしまっていて、このままだと処理ができないので
残業目的と残業時間を「残業時間:」という文字列で分割して、新しい変数に格納します。

項目 設定値
名前 残業項目配列
種類 アレイ
split(variables('残業目的タイトル削除'),'残業時間:')

split関数は文字列を指定した文字列で分割し、配列として返す関数です。
分割前の文字列に対して 残業時間 という文字で分割を行ってます

項目
分割前 A作業対応のため
残業時間:1
分割後 A作業対応のため
1

新しいステップを追加します。
検索欄に変数と入力し、変数を初期化するを選択します。
残業項目配列の1番目に格納されている要素(残業の目的)を変数に格納します。

項目 設定値
名前 残業目的処理前
種類 文字列
last(take(variables('残業項目配列'),1))

変数から値を取得するにはvariables関数を使用します。
last関数は配列から最後の要素を取り出します。
take関数は配列の先頭から指定した数の要素まで取り出します。
Power Automateで配列から要素を取り出す場合はlastとtakeを組み合わせます。

残業目的の末尾に改行コードが入っているため、削除します。
改行コードの削除は以下を参考にさせていただきました。
https://qiita.com/kojisaiki/items/d7fb7932e6f20e1e6628

新しいステップを追加し、変数を初期化するを選択して下記のように入力します。

項目 設定値
名前 改行コード
種類 文字列
(Enterを押して改行)

新しいステップを追加し、変数を初期化するを選択して下記のように入力します。
repleace関数を利用して改行コードを削除しています。

項目 設定値
名前 残業目的処理前
種類 文字列
replace(variables('残業目的処理前'),variables('改行コード'),'')

残業項目配列の2番目に格納されている残業時間を変数に格納します。
変数を初期化するを選択し、下記のように入力します。

項目 設定値
名前 残業時間
種類 文字列
last(variables('残業項目配列'))

配列から最後の要素を取り出す場合、last関数だけで取り出せます。

Teamsに投稿された日付を変数に格納します。
変数を初期化するを選択し、下記のように入力します。

項目 設定値
名前 投稿日
種類 文字列
addHours(triggerOutputs()?['body/createdDateTime'],9,'yyyy/M/d')

Teamsで投稿された日付はUTCなので、addHours関数を利用してJSTに変換します。

Teamsの投稿者を変数に格納します。
変数を初期化するを選択し、以下のように設定します。
値欄をクリックすると入力フォームが表示されるので、入力フォームから値を入力します。

項目 設定値
名前 投稿者
種類 文字列
メッセージ from ユーザー displayName(フォームより選択)

新しいステップを追加し、検索欄にExcelと入力します。
Excel Online(Business)を選択し、表に行を追加をクリックします。

新しいステップが追加されるので、各項目を設定します。

項目 設定値
場所 Group-Test(リストから選択)
ドキュメント ドキュメント(リストから選択)
ファイル /General/残業.xlsx(リストから選択)
テーブル 残業記録(リストから選択)
名前 投稿者(フォームから入力)
日付 投稿日(フォームから入力)
残業目的 残業目的(フォームから入力)
時間 残業時間(フォームから入力)

Power Automate画面右上の保存をクリックします。

作成したフローのテスト

Power Automate画面右上のテストをクリックします。

フローのテスト画面が表示されます。
トリガーアクションを実行するを選択し、保存&テストをクリックします。

Teamsにメッセージを投稿します。

Power Automateの画面上部に、ご利用のフローが正常に実行されましたと表示されます。

Teamsに保存したExcelファイルを確認すると、Teamsに投稿したメッセージがExcelに反映されています。

再度テストを行いたい場合は、フローのテスト画面を表示します。
以前の実行からのデータを使用するを選択し、いずれかの以前の実行結果を選択します。
(例だと10分前に成功したテストデータを使用)

保存&テストをクリックすると、以前に投稿された内容を利用してフローを実行します。
わざわざTeamsに再投稿しなくても、以前のテストデータを利用してフローの動作確認ができるので便利です。

Power Automateの注意点

フローの1日あたりの実行回数制限

プランによって1日あたりに実行できるフロー回数に制限があります。
https://docs.microsoft.com/ja-jp/power-platform/admin/api-request-limits-allocations

私が利用しているOffice ライセンスに付属するPower Automateは1日あたり2000回までフローを動作させることができます。 1日あたりにフローを2000回動作させることは、それほどないと思いますがプランごとに実行回数に制限があることは
知っておいたほうが良いと思います。

無限ループするフローに気をつける

トリガーにTeamsの「チャンネルに新しいメッセージが追加されたとき」を設定しアクションで「メッセージを投稿する」フローを作成すると、無限ループするフローができます。
誤って上記のようなフローを作成して、フローをオン状態で放置するとメッセージの投稿を延々と繰り返すフローができます。

1度、誤って無限ループするフローをテストで作成して放置してしまい1日あたりのフロー実行回数が900回を超えてしまったことがあったのでフローの作業内容について、無限ループしていないか注意する必要があります。

参考サイト

Azure Logic Apps および Power Automate のワークフロー式関数のリファレンス ガイド

Microsoft Teams を使ってリモートワークでもチームの作業状況を把握する(with Power Automate & Excel)