Power AutomateでSharePointの名簿を使い、Plannerに1人1タスクを自動作成する仕組みを実装したので手順をまとめます。
名簿の人数分のタスクを手作業で作ると、人数が増えるほど時間がかかります。このフローを一度組んでおくと、定期実行のたびに全員分のタスクが自動で生成されるようになります。
この記事でできること
- SharePointの名簿(全員)から、1人1つのPlannerタスクを自動で作成できる
- 所属課ごとに、課別のバケットへ自動で振り分けられる
- 課が未設定の人も「未振り分け」バケットに入るので、配り漏れが出ない
このフローを組むまでにいくつか詰まった箇所がありましたので、解決した方法とつまずきやすいポイントも一緒に書いていきます。
完成イメージ
完成すると、Plannerのボードが課ごとのバケットに分かれ、各バケットに担当者分のタスクが並んだ状態になります。

全体の実装構成
やっていることは大きく2つです。1つは、名簿の全員をループして1人ずつタスクを作ること。もう1つは、その人の所属課の番号を見て、入れるバケットを出し分けることです。この2つを組み合わせています。
フローの骨格は次の並びです。
- 定期実行(Recurrence)で起動する
- SharePointの名簿を全員取得する
- バケットIDを入れる変数を初期化する
- 名簿をループし、Switchでバケットを決めてからタスクを作成する

トリガーは定期実行にしています。この記事では「決まったタイミングで自動起動する」という前提で進めます。
実装手順
Step1|名簿を全員取得する(改ページをオンにする)
SharePointの「複数の項目の取得」で、名簿リストを取得します。
ここで私が最初に詰まったのが、取得件数でした。このアクションは既定で100件までしか取得しません。名簿が100人を超えると、101人目以降にはタスクが作られず、配信漏れになります。
対処は、アクションの設定タブで「改ページ」をオンにして、「しきい値」を1000にします。これで1000人まで取得できます。

⚠️ 注意:既定の100件のままだと、テスト時の少人数では気づかず、人数が増えたときに漏れます。名簿を扱うフローでは先に設定しておくと楽でした。
Step2|バケットのGUIDを取得する
次に、Plannerの「バケットの一覧表示」(ListBuckets)を仮で置きます。
このあとのStepで、課ごとにバケットを指定します。そのときバケットを識別するのに、バケットのGUID(バケットごとに割り振られた固有のID)が必要になります。
GUIDは、いったんフローを実行し、実行履歴の中身(body.value)から各バケットの name と id を確認して控えます。控えたGUIDは、次のStep4のSwitchのケースに直接書き込みます。

GUIDは基本的には変わらないため、私はSwitchにそのまま書き込む形にしました。課が増減したときはSwitchに手を入れる必要がありますが、頻度が低いのでこの作りにしています。
Step3|バケットIDを入れる変数を用意する
Switchを組む前に、決まったバケットのGUIDを受け取る変数を用意します。
「変数を初期化する」を置き、名前を varBucketId、種類を「文字列」、値は空のままにします。このあとSwitchが課ごとのGUIDを varBucketId に入れ、タスク作成アクションがこの変数を読みます。
⚠️ 注意:「変数を初期化する」は、スコープやループ、条件の中には置けません。トップレベル(どのアクションにも囲まれていない場所)にしか置けない仕様です。名簿を取得したあと、ループを置く前の位置に配置します。

Step4|所属課からバケットを決める(Switchで振り分け)
名簿のループ(Apply to each)の中にSwitchを置きます。所属課の番号で分岐して、入れるバケットのGUIDを変数(varBucketId)にセットする。という作りです。
まず、ループの設定で「同時実行」を1(順次)にします。理由は、varBucketId という1つの変数を全員で使い回しているためです。ループを並列で走らせると、別の人のGUIDで変数が上書きされ、振り分けが混ざります。順次にすることで、1人ずつ確実に処理されます。
Switchの「オン」には所属課の番号(SectionNo)を入れ、ケースは「1」〜「7」を用意します。ケース1なら第一課のGUIDをvarBucketIdにセット、ケース2なら第二課、というように番号でそのまま分岐させます。

なお、このオン欄では int() で数値を整数に変換して入れています。SharePointの数値列がそのままだとSwitchの型と合わずにエラーになることがあり、その対策です。ここは別記事に詳しくまとめたので、型のエラーで詰まった方はそちらを見てください。
👉【Power Automate】Switchの型不一致対策|String・Integer・Floatの型変換
Step5|1人につき1つのタスクを作成する
Plannerの「タスクを作成する」で、ループ中の1人分のタスクを作ります。設定する項目は主に3つです。
タイトルには、氏名を差し込みます。私は次のように concat() で組みました。
// タイトル欄
concat('【勤怠特別協定】申請のお願い(', items('For_each')?['Title'], ')')
// items('For_each')?['Title'] が今ループ中の人の氏名
バケットID欄(fx)には、Step4でセットした変数を入れます。
// バケットID欄
variables('varBucketId')
骨格を作った段階では、ここは第一課のGUID固定でした。それを varBucketId に繋ぎ替えることで、課別の振り分けが効くようになります。
担当者の割り当てには、名簿の一行テキスト列のEmailを渡します(item()?['Email'] の形)。Plannerの担当者割り当ては、テナント内のユーザーのEmailでないと解決できません。外部のメールアドレスや実在しないアドレスでは割り当てられないので、名簿のEmailは社内ユーザーのものにしておきます。

なお、タスクの期限も同じアクションで設定できます。「毎月◯日」を実行日に左右されずに入れる式は、別記事にまとめる予定です。
Step6|振り分け先がない人を「未振り分け」に入れる
Step4のSwitchには、既定(Default)のケースも用意します。ここには「未振り分け」バケットのGUIDをセットします。
これを入れておくと、所属課の番号が未設定だったり、想定外の値だったりする人でも、必ずどこかのバケットにタスクが作られます。私はまず全員にタスクが届くことを優先したかったので、この既定のケースを入れました。
ハマりポイントまとめ
私が実装中に踏んだエラー・気をつけた点を整理します。
| 項目 | 症状 | 対処 |
|---|---|---|
| 名簿の取得件数 | 既定100件で打ち切られ、101人目以降が漏れる | 「複数の項目の取得」で改ページをオン・しきい値1000 |
| 担当者の割り当て | 外部・架空のメールでは割り当てられない | 名簿のEmailはテナント内ユーザーにする |
| Switchの型 | 数値列の型が合わずSwitchがエラーになる | オン欄を int() で整数化(詳細は別記事) |
| 変数の共有 | ループ並列で変数が上書きされ振り分けが混ざる | ループの同時実行を1(順次)にする |
まとめ
今回のポイントをまとめます。
- 名簿を全員取得するときは、改ページをオン・しきい値1000で件数の打ち切りを防ぐ
- バケットのGUIDはListBucketsの実行履歴から控えて、Switchのケースに書き込む
- バケットIDの変数はループの外(トップレベル)で初期化しておく
- 課番号でSwitchを分岐し、バケットのGUIDを変数に出し分ける
- 変数を共有するので、ループは同時実行1(順次)にする
- 既定(Default)のケースを用意して、配り漏れを防ぐ
名簿の人数分のタスクを毎回手作業で作ると、人数が増えるほど手間がかかります。一度このフローを組んでおくと、定期実行のたびに全員分のタスクが自動で設定できるようになります。
Power Platformを触り始めたばかりの方に向けて、こういった詰まりポイントをこれからも発信していきます。よかったらブログをブックマークして、またのぞきに来てください。
あわせて読みたい
この記事のStep4で触れた、Switchの型エラーの原因と解決を詳しくまとめています。型のエラーで止まってしまった方は、こちらから読むとスムーズです。



コメント