Power Automate で Outlook の予定を一括削除する

2022年04月22日 金曜日


【この記事を書いた人】
古賀 勇

IIJ ネットワーク本部アプリケーションサービス部所属。 メールサービスの運用業務に従事し、日々世界の悪と戦う一児の父親。社内 Power Automate エバンジェリスト(自称)。M3AAWG member / openSUSE Users / WIDE Project メンバー。趣味は大喜利。はがき職人。

「Power Automate で Outlook の予定を一括削除する」のイメージ

4月で年度が変わり、役割が変わるなどで、それまで入っていた定例会の予定から一気に抜けたくなるときがあります。このとき Outlook の予定表には

  • 繰り返しの予定
  • 1回のみの予定

があり、前者の繰り返しの予定は一括で辞退することができますが、後者の 1回ずつ登録された予定は 1つずつ消していくしかないようです。(※1)

この手で 1つずつ予定表を消していく、という作業がダルいです。何より「1つずつ」という点がエンジニア精神に反しています。
Power Automate エバンジェリスト(自称)としては、もうこれは自動化するしかありません。

予定表キャンセラー

特定キーワードを含む予定を、根こそぎ消していくフローを作りました。

強力過ぎて、うっかり必要な予定まで消してしまうと、「このひと、退職するのかな?」などと思われて危ないので、「本当に削除する」スイッチを追加して、dry-run(テスト実行)できるようにしておきました。ご安心ください。

使いかた

消したい予定表の件名を入力し、消したい期間を指定するだけです。
とても簡単に複数の予定を消せてしまうので気をつけてください。

 

作りかた (フロー詳細)

1. Power Automate にサインイン

https://powerautomate.microsoft.com/ja-jp/

2. フローの新規作成

「新しいフロー」→「インスタント クラウド フロー」で新規作成します。

3. フローのトリガーを選択

フローの名前を適当に入力し、「手動でフローをトリガーします」を選択、作成ボタンを押します。

4. 入力項目を作成

クリックすると入力の種類を選択できますので、次のように入力フォームを作っていきます。

  • テキスト →「消したい予定」
  • 日付 → 「どこから消す?」
  • 日付 → 「どこまで消す?」
  • はい/いいえ → 「本当に実行する」

ちなみにこのフォーム、あとで順序を入れ替えることができないので、ちゃんと考えておきます。(入れ替えたくなった場合は、トリガーそのものを消して最初から作ります)

5. 削除対象の予定の範囲を設定

「新しいステップ」をクリックして、「イベントのカレンダー ビューの取得」を追加します。

開始時刻は取得する予定の開始位置(日時)、終了時刻はその終了位置(日時)です。
消したい予定表の範囲をここで指定します。

このアクションのポイントは、「詳細オプションを表示する」のところに隠れている「検索」です。ここに消したい予定のキーワードを入れておくことで、削除対象を部分一致で絞り込めます。(※2)

ここを空欄にすると、該当範囲の全ての予定が対象になるので気をつけてください。

6. 変数を定義

「新しいステップ」→「変数」で、後ほど使う変数をここで 3つ宣言(追加)しておきます。
どうやって使うかは、この後すぐ出てきます。

上のスクリーンショットの “my-email-address@example.com” の部分は、ご自身のメールアドレスを入力してください。

7. 確認用のメールを送信

この部分はなくても構わないのですが、無言で一気に削除されると、もし指定を誤っていたときに復活できませんので、念のため削除前に自分宛てにメールしておきます。これなら、うっかり間違った予定を消してしまっても、後で何を消したか分かります。

次のスクリーンショットの要領で、手順 5. で取得したイベントをメール本文に貼り付けます。

1予定 = 1通ですと、100件の予定で 100通メールが出てしまうので配列を使います。(社内でやらかしました)
「新しいステップ」→ 「変数」から、「配列変数に追加」を選択して、メールに書きたい内容を追加します。

そうすると、自動的に「Apply to each」が作られて、for 文のようになります。
Power Automate では繰り返しの要素が使われると自動的に Apply to each が作成されます。

また、Power Automate 側の制約で、配列の要素全てを直接メール本文に展開するのはできなさそうでしたので、一旦文字変数に格納しています。

メール本文は手抜きですが、配列の区切り “,” を改行 “<br>” に変換して、1行 = 1予定となるようにしました。
少々乱暴ですが、不要でこれから消す予定なのだから分かればよいでしょう。

replace(variables('メール本文'), ',', '<br>')
8. テスト実行はここで終了

Dry-run のときはメールの送信をして終了するように、ここで制御を入れておきます。

条件(if)文の挿入は、「新しいステップ」→「コントロール」→「条件」です。
右辺の「true」は、「式」から入力します。

9. 実行前の確認ダイアログ

私は用心深いので、仮に本当に消すモードで実行したとしても、削除直前に確認のダイアログを差し込むことにしました。
確認ダイアログは、承認のアクションを使うことで代替できるので便利です。

「新しいステップ」→「承認」→「開始して承認を待機」で追加します。

自分自身を担当者にして承認依頼をし、OK なら「承認」、ダメならそこで「拒否」を選ぶようにしておけば、届いたメールを見て青ざめることもありません。冷静にここでフローを止められるわけです。

10. 一括で予定表の削除を実行

最後に、手順 5. で取得したイベントに対して、繰り返しイベントの削除をしていきます。

先ほどと同様に、「新しいステップ」→「コントロール」→「条件」で条件アクションを追加し、承認アクションの「結果」が「Approve」だったときだけ、予定を削除するようにします。「はい」の方に、「アクションの追加」→「イベントの削除」で、「予定表 ID」は自分自身の予定表を選択し、「ID」は「動的なコンテンツ」の中にある「イベントのカレンダー ビューの取得 (V3)」の「ID」を選択すれば完成。

じつは、このフローで本当に必要だった部分は、たったこれだけです。

最後に予定を消し終わったらスマートフォンにプッシュ通知するようにしておきました。社用スマホをお持ちでない場合は、このアクションは不要です。

自動化は正義!

 


  1. Windows の Outlook アプリを使えば、一括削除はできるようです。[↑]
  2. このフローを定期実行にしておき、「要らないのに勝手に予定を入れてくる 鬱陶しい 同僚からの予定表を自動でクリーニング(削除)する」といった活用方法も考えられますが、本記事では割愛させていただきます。[↑]

古賀 勇

2022年04月22日 金曜日

IIJ ネットワーク本部アプリケーションサービス部所属。 メールサービスの運用業務に従事し、日々世界の悪と戦う一児の父親。社内 Power Automate エバンジェリスト(自称)。M3AAWG member / openSUSE Users / WIDE Project メンバー。趣味は大喜利。はがき職人。

Related
関連記事