こんにちは。SJC共同開発推進室の坂根です。
今回は、前回のPower AutomateでTo Doにタスク一括登録!(1)の続編ということで、作成したToDoリストの更新をしてみたいと思います!
前回はPower Automateを使ってExcelからToDoにタスクを一括登録するフローを作りました。
しかし、このフローには「実行するたびにタスクが重複してしまう」という課題がありました。
今回はこの課題を解決するため、既存のタスクは更新、新しいタスクは追加するフローを作ります!
💡 関数の解説もしています!
興味がある方はチェックしてみてください!
もちろん、見本をコピーするだけでもフローは作れますのでご安心を!!
今回のゴール
まずはおさらい
前回は、以下の3ステップからなるシンプルなフローを作成しました。
①Excelファイルのタスク表から、すべての行(タスク情報)を抽出する
②ToDoに登録する
③①で抽出した行の数、②を実行する
このままではいけません!
このフローは、「新しくToDoを追加する」ことはできますが、すでに登録済みのToDoを更新したり重複を避けたりする機能はありません。(フロー実行の度に重複したタスクが作成されてしまう…)
そこで今回は、このフローに手を加え、タスク表の差分のみ反映できるようにしてみます。
今回のゴールは?
今回の完成フローは大きく4ステップで構成されます。
★:追加要素
①Excelファイルのタスク表から、すべての行(タスク情報)を抽出する
②Microsoft To Doから、対象のタスクリスト内のすべてのToDoを取得しておく(★)
③①で抽出したExcelの各行ごとに、以下の処理を行う (★)
・②で抽出したToDoに同じタスクIDがある場合 → そのToDoを更新する(★)
・ない場合 → ToDoに登録する
④①で抽出した行の数、③を実行する
③の「該当するToDoが存在するかどうかを判定」については、
誤動作を避けるため、タスクIDの完全一致で判定とします。
条件判定(完全一致)の例
例えば、ループ中のタスクIDが1234の場合、ToDoリストが次のようになっているとします。
・1234: 資料作成
・5678: 会議準備
・12345: レビュー依頼
・9012: 報告書作成抽出されるのは「1234: 資料作成」だけ。
→ この場合、フローは「既存ToDoがある」と判断し、自動で更新します。
※「12345: レビュー依頼」は含まれません。
フローの作り方
今回は前回作成したフローに手を加える形で作成していきます。
元のフローはコピーして残しておくことをおすすめします。そうすることで、いつでも前のバージョンに戻れるので安心です。
⑴ [⊕] →[Microsoft To-Do] → [フォルダー別に To Do を一覧表示する] と選択し、前回作成したToDoリストから抽出するよう選択します。
[フォルダー別に To Do を一覧表示する]のアクションは、Microsoft To-Doの特定のリストを指定してToDoを全件抽出できます。
[To-do List] には前回作成したタスクリストを選択してください。
・[To-do List(To Do リスト)]:タスクリスト
・[Top Count(上から順に取得)]:999(最大999件です)
すると、Microsoft To-Doから以下のようなToDoのデータを全件取得できます。
今回は、この中の「id」「title」を後ほど使用します。
※他にも様々な情報を取得できますので、公式ドキュメントをご参照ください。
1 2 3 4 5 6 7 8 9 10 |
[ { "id": "A1B2C3", "title": "1234: 資料作成", "dueDateTime": "2025-08-29T09:00:00", "status": "notStarted", // ...(略)... }, // ...(略)... 上のまとまりが、ToDoの個数分続く ] |
⑵ [⊕] →[データ操作] → [アレイのフィルター処理]と選択し、絞り込み条件を入力します。
アレイのフィルター処理は、たくさんのデータの中から特定の条件に一致するものを探し出す検索機能です。
このアクションを使うことで、Excelのタスクと一致するToDoがすでに存在するかどうかを効率よくチェックできます。
📝アレイとは?
アレイ(Array:配列)というのはプログラミング用語で、連続するデータを意味します。
例えば、以下のような複数のデータを持つ配列です。
123456 [{ タスクID:1234, タスク名:資料作成 },{ タスクID:5678, タスク名:会議準備 },{ タスクID:12345, タスク名:レビュー依頼 },{ タスクID:9012, タスク名:報告書作成 }]各データ1つ1つを要素と呼び、[添え字番号]で各要素を指します。添え字番号は1ではなく0始まりのためご注意ください。
今回の配列の[0](先頭) ですと { タスクID:1234, タスク名:資料作成 } となります。つまり、「アレイのフィルター処理」は、データを1つずつチェックして条件に合うものだけ取り出す処理と言えます。
フィルター処理では、主に4つの項目を設定します。
①検索対象(From):「どこから探す?」
→手順⑴で取得したすべてのToDoを指定します。
②比較されるデータ(左辺):「何と比べて探す?」
→今回は、ToDoのタイトルから抜き出したタスクIDを設定します。
③比較するデータ(右辺):「何を基準に探す?」
→ループ中タスクのタスクIDを指定します。
④比較方法(中央):「どうやって比べる?」
「等しい」を選択して、ToDoのタイトルの先頭がExcelタスクのIDと一致しているか判定します。
📝使用関数の解説①
ここで使用した関数の意味について解説します。
※無理に覚える必要はありませんので、見本をコピーするだけでもOKです!
- split(○○, △):文字列「○○」を文字「△」で分割し、配列を作る。
- item():ループの中で、今処理している1つのデータを取り出す。
- item(‘◆’):ループの中に別のループがあるとき、「◆」という名前の外側のループで今処理しているデータを取り出す。
- ◇?[‘▲▲’]:「◇」の中から、「▲▲」という名前の項目を取り出す。
※「?」は、「▲▲」という名前の項目が無いときにエラーになって処理が止まってしまうのを防ぎます。見本①
1 split(item()?['title'], ':')[0]→ループ中のデータの「title」を「:」で分割して、先頭の値を取り出す。
見本②
1 item('それぞれに適用する')?['タスクID']→外側ループ「それぞれに適用する」の今処理中データから、「タスクID」を取り出す。
⑶ [⊕] →[コントロール] → [条件]と選択し、ToDoの更新・追加を判別するための条件を入力します。
・[条件の左側]:手順⑵で作成したフィルター結果の配列の 件数(長さ) を選択します。
・[条件の右側]:1
・[条件の真ん中]:以上
📝使用関数の解説②
関数の使い方を確認しましょう。
※もちろん見本をコピーするだけでもOK!!
- length(○○):文字列「○○」や、配列「○○」の長さを調べる。
- body(△△):「△△」という名前のアクションの処理結果全体を取り出す。
見本
1 length(body('アレイのフィルター処理'))→「アレイのフィルター処理」の処理結果配列の要素数を取得する。
⑷ すでにあるToDoを追加するアクションを、[False]内に移動します。
前回記事で既に作成していた、ToDoを追加するアクションを条件分岐のFalse内へドラッグ&ドロップで移動します。
これで「ToDo一覧の中にループ中のタスクが無い場合、ToDoを新規追加する」という処理が完成しました。
⑸ True内にToDoを更新するアクションを追加します。
最後は、ToDoの更新です。
「To Do を更新する」のアクションを手順⑷のTrue内に追加します。
・[To Do リスト]:タスクリスト
・[To Do タスク]:手順⑵で絞り込んだToDo
・[期日]:タスク表の「期限」
・[タイトル]:「タスクID: タスク名」
📝使用関数の解説③
- formatDateTime(○, ‘フォーマット’):指定した日時「○」を、指定したフォーマットに変換する。
- addDays(◆, △):日付「◆」に「△」の日数を加算する。
- int(○):値「○」を整数に変換する。
- yyyy-MM-ddTHH:mm:ss:日付フォーマットの一種。「T」は日付と時刻の区切りを表す国際標準の記号。
例)2025年8月29日 9時15分30秒 → 2025-08-29T09:15:30見本①
1 body('アレイのフィルター処理')[0]?['id']→「アレイのフィルター処理」の処理結果配列の先頭要素から、「id」を取り出す。
💡ここで出てくる「id」は、Microsoft To-Do が内部的に持っている番号で、タスクIDとは別物です。見本②
1234567 formatDateTime(addDays('1899-12-30',int(items('それぞれに適用する')?['期限'])),'yyyy-MM-ddTHH:mm:ss')→外側ループ「それぞれに適用する」で今処理中のデータから「期限」を取得し、数値(シリアル値)に変換する。(シリアル値は、前回記事で解説しています。)
→基準日「1899-12-30」に数値を加算し、「yyyy-MM-ddTHH:mm:ss」形式に変換する。
⑹ 完成!!!
完成したのがこちらになります!
タスク表を更新して実行!
更新前のToDoリスト:
(あっ、期限オーバーのタスクばかり…!)
更新後のタスク表:
赤字の部分が更新した内容です!
(おっと、ちゃっかり期限を延長してますね)
フローを実行してみます!
・
・
・
しっかりとToDoが更新され、追加した2つのタスクも登録されました!!!
まとめ
今回は中級編として、条件分岐を活用したToDoの追加・更新に挑戦してみました。
配列のフィルターや [0] を使った先頭要素の取得など、少し中級向けのテクニックも登場しましたが、思ったよりスムーズに作業できました。
さらに応用すれば、ほかのサービスとの連携や、手動でなくタイマーで自動実行するフローなども作れるため、活躍の幅はもっと広がりそうです。
エコモットでは一緒にモノづくりをしていく仲間を随時募集しています。弊社に少しでも興味がある方はぜひ下記の採用ページをご覧ください!