初めてRPAツールを触る方や基本的なプログラミング学習向けに、Power Automate Desktop(PAD)の条件アクション(If、Else、Case、Switch)について解説しています。ご自身の環境で動作可能なフローのテンプレートも共有して説明していますので、Power Automate Desktopを使った自動化フローを作る際の参考にしてみてください。
マイクロソフトの無償RPA(自動化ツール)である「Power Automate Desktop(PAD)」での条件アクション(分岐処理)の使い方について解説しています。
繰り返し処理と並び自動化のフローには欠かせない条件分岐。画面の状態によって次の処理を変えたり、読み取ったデータの内容によって異なる処理をさせたりと、分岐の方法もさまざまです。
Power Automate Desktopでは、繰り返し処理を行うためのアクションとして代表的な「If」、「Else」、「Case」、「Switch」などのアクションのほか、RPA(自動化ツール)ならではの「画像が存在する場合」「テキストが画面に表示される場合」「ファイルが存在する場合」などといったPCの状態をより簡単に判定できる条件分岐なども用意されており、さまざまな使い分けが可能です。
今回は具体的な例とともにこれら分岐アクションの作り方、使い分けについてご紹介します。
無料自動化ツールの「Microsoft Power Automate Desktop」について、そもそもの解説や導入方法についてはPower Automate Desktopについてをお読みいただくと基本的な使い方などが確認できます。
Power Automate Desktopの分岐処理
Power Automate Desktopでは、条件分岐を行うためのアクションとして、以下の15種類のアクションが用意されています。
- Webページに次が含まれる場合
- ウィンドウが次を含む場合
- サービスが次の場合
- テキストが画面に表示される場合(OCR)
- ファイルが存在する場合
- フォルダーが存在する場合
- プロセスが次の場合
- 画像が存在する場合
- ウィンドウが次の条件を満たす場合
- Case
- Default case
- Else
- Else if
- If
- Switch
この「条件」カテゴリに含まれる15種類のアクションには汎用的な条件アクションのほか、さまざまな判定条件を指定するものや条件と組み合わせて分岐を制御するためのアクションがあります。
ここでは、この15種類のアクションを体系化するため、これらを「条件アクション(汎用)」「条件アクション(個別)」「分岐アクション(If用)」「分岐アクション(Switch用)」の4つに分類して解説を進めます。
このページでは「Case」「Default case」「Else」「Else if」「If」「Switch」のアクションを使った基本的な条件分岐フローの作り方について解説しています。
その他の条件アクションの機能詳細と設定方法、サンプルについては「条件(〇〇の場合)アクションの使い方。PADならではの条件判定、サンプル紹介」にまとめていますので、こちらををご覧ください。
条件アクション(汎用)
条件アクション(汎用)は、フローで作られた一般的な変数を判定条件として使用する条件アクションです。
「もし〇〇ならば」や「〇〇が〇〇の場合」というような特定の条件を判定し、それらの条件に従って処理の内容を分岐させたい時に使用します。
Power Automate Desktopでは、一般的なプログラム言語の構文としてもよく使われる以下の2つが汎用の条件アクションとして用意されています。
- If
- Switch
「If」と「Switch」のアクションはそれぞれ条件の判定方法や分岐の方法が異なります。
これらの条件アクションは特定の条件指定の他にも「その他の場合」や「〇〇ではなく〇〇でもない場合」というような細かい分岐を組み立てることができます。このような条件指定の際に後述の「分岐アクション」を組み合わせて使用します。
条件アクション(個別)
条件アクション(個別)は、Power Automate Desktopに用意されたその他の自動化アクションなどと同じように、画像やテキスト、画面の状態などの要素を判定条件として使用するPower Automate Desktopならではの条件アクションです。
それぞれのアクションはアクション名が「〇〇の場合」として命名されており、以下の9種類が用意されています。
- Webページに次が含まれる場合
- ウィンドウが次を含む場合
- サービスが次の場合
- テキストが画面に表示される場合(OCR)
- ファイルが存在する場合
- フォルダーが存在する場合
- プロセスが次の場合
- 画像が存在する場合
- ウィンドウが次の条件を満たす場合
それぞれ判定条件として指定できる項目が異なりますが、いずれのアクションも「If」アクションと同じフロー(Else、Else ifとの組み合わせ)を構成することができます。
Ifと組み合わせる分岐アクション
「If」アクションおよび個別条件アクションで組み合わせて使用できる分岐アクションです。
- Else
- Else if
「If」アクションと「End」アクションとの間に配置することで「その他の場合」や「その他の場合で、〇〇の場合」などの複数の条件分岐を設定することができます。
IF Value >= 100 THEN
# Valueの値が100以上の場合
ELSE IF Value >= 50 THEN
# Valueの値が50以上の場合
ELSE
# Valueの値がそれ以外の場合
END
Switchと組み合わせる分岐アクション
「Switch」アクションで組み合わせて使用できる分岐アクションです。
- Case
- Default case
「Switch」アクションと「End」アクションとの間に配置することで「Aの場合、Bの場合、Cの場合」や「どの条件にも当てはまらない場合」などの複数の条件分岐を設定することができます。
SWITCH Value
CASE = 1
# Valueの値が1の場合
CASE = 2
# Valueの値が2の場合
CASE = 3
# Valueの値が3の場合
DEFAULT
# Valueの値がそれ以外の場合
END
条件処理の作り方
汎用条件アクション(If、Switch)や個別条件アクションは、フローの編集画面に配置すると以下のように「条件判定のアクション(開始)」と「End」アクションの2つが同時に配置されます。
「If」アクションの場合
「Switch」アクションの場合
条件分岐のアクションは、該当する条件の時に実行するアクションの範囲を決めるために、「開始」と「終了」のポイントを定める必要があります。これらを決めるのがこの2つのアクションです。
この2つの間には複数のアクションを配置することができます。そして、このアクションが条件判定に一致した時にだけ実行されるアクションとなります。
基本的な条件分岐を作る
「If」アクション、「Switch」アクションを使って、変数や比較式を使った判定で条件分岐を作ることができます。
If:もし〇〇ならば
「If」アクションを使うことで、「もし〇〇ならば」という条件のフローを作ることができます。
以下は、「現在の日時を取得して、もし曜日の値がSundayなら『日曜日だよ!』というメッセージを表示する」という条件アクションを行うフローのサンプルです。
サンプル:スクリーンショット
サンプル:Robinソースコード
DateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
IF CurrentDateTime.DayOfWeek = $'''Sunday''' THEN
Display.ShowMessage Title: $'''今日は?''' Message: $'''日曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
END
Switch(+Case):Aの場合、Bの場合、Cの場合
「Switch」アクションを使うことで、「Aの場合、Bの場合、Cの場合」という条件のフローを作ることができます。
以下は、「現在の日時を取得して、その曜日の値がSundayの場合は『日曜日だよ!』というメッセージを表示し、Saturdayの場合は『土曜日だよ!』というメッセージを表示する」という条件アクションを行うフローのサンプルです。
サンプル:スクリーンショット
サンプル:Robinソースコード
DateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
SWITCH CurrentDateTime.DayOfWeek
CASE = $'''Sunday'''
Display.ShowMessage Title: $'''今日は?''' Message: $'''日曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
CASE = $'''Saturday'''
Display.ShowMessage Title: $'''今日は?''' Message: $'''土曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
END
また、「Switch」アクションのルールとして、かならず最低一つの「Case」アクションを使用する必要があり、また「Switch」アクションの次のアクションには「Case」(やコメント、End)以外のアクションを配置することができません。
より詳細な条件分岐を作る
条件判定アクションと分岐アクションを組み合わせることでより詳細な条件分岐を作ることができます。
Else:その他の場合
「If」アクションに「Else」アクションを組み合わせることで「その他の場合」のフローを設定することができます。
ひとつの「If」アクションには最大1つの「Else」アクションを配置することができます。
サンプル:スクリーンショット
サンプル:Robinソースコード
DateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
IF CurrentDateTime.DayOfWeek = $'''Sunday''' THEN
Display.ShowMessage Title: $'''今日は?''' Message: $'''日曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
ELSE
Display.ShowMessage Title: $'''今日は?''' Message: $'''日曜日じゃないよ''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
END
Else if:その他の場合で、〇〇の場合
「If」アクションに「Else if」アクションを組み合わせることで「その他の場合で、〇〇の場合」のフローを設定することができます。
「Else if」アクションはひとつの「If」アクション内に複数配置することができます。
サンプル:スクリーンショット
サンプル:Robinソースコード
DateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
IF CurrentDateTime.DayOfWeek = $'''Sunday''' THEN
Display.ShowMessage Title: $'''今日は?''' Message: $'''日曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
ELSE IF CurrentDateTime.DayOfWeek = $'''Saturday''' THEN
Display.ShowMessage Title: $'''今日は?''' Message: $'''土曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
ELSE
Display.ShowMessage Title: $'''今日は?''' Message: $'''平日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
END
Switch + Case:Aの場合、Bの場合、Cの場合
「Switch」アクションに「Case」アクションを組み合わせることで「〇〇の場合」のフローを設定することができます。
「Case」アクションは「Switch」アクションに最低1つ配置する必要があり、複数配置することができます。
サンプル:スクリーンショット
サンプル:Robinソースコード
DateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
SWITCH CurrentDateTime.DayOfWeek
CASE = $'''Sunday'''
Display.ShowMessage Title: $'''今日は?''' Message: $'''日曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
CASE = $'''Saturday'''
Display.ShowMessage Title: $'''今日は?''' Message: $'''土曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
END
Default:どの条件にも当てはまらない場合
「Switch」アクションに「Default」アクションを組み合わせることで「どの条件にも当てはまらない場合」のフローを設定することができます。
ひとつの「Switch」アクションには最大1つの「Default」アクションを配置することができます。
サンプル:スクリーンショット
サンプル:Robinソースコード
DateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
SWITCH CurrentDateTime.DayOfWeek
CASE = $'''Sunday'''
Display.ShowMessage Title: $'''今日は?''' Message: $'''日曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
CASE = $'''Saturday'''
Display.ShowMessage Title: $'''今日は?''' Message: $'''土曜日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
DEFAULT
Display.ShowMessage Title: $'''今日は?''' Message: $'''平日だよ!''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
END
条件アクションは入れ子にできる
「If」「Switch」などの条件分岐アクションは、条件分岐の中にさらに条件分岐アクションを含めるような「入れ子」にすることもできます。
上記のアクションは下記のアクションと同じ動作をします。
「If」アクションと「Switch」アクションの使い分け
汎用的な条件アクションである「If」アクションと「Switch」アクションの使い分けについて解説します。
「If」も「Switch」も同じ分岐を作ることができる
前項では「If」、「Switch」と組み合わせる分岐アクションについて解説しましたが、これらの条件分岐の設定方法によって、そもそも「If」アクションも「Switch」アクションのどちらを使っても全く同じ動作をするフローを組み立てることが可能です。
これらは機能上の制限としてではなく、組み立てたフローの見やすさ、把握のしやすさにも影響するため、わかりやすいフローを作るために使い分けされるのが一般的です。
「If」は1つや2つの分岐向け
「Switch」アクションは、必ず「Case」アクションを組み合わせる必要があります。そのため、ひとつの条件判定を行うためにも「Switch」「Case」「End」の3つのアクションの配置が必要になります。
一方、「If」アクションでひとつの条件判定を行うには「If」「End」の2つのアクションで完結します。
分岐条件の少ないフローでは、より少ないアクションで完結に組み立てたフローが読みやすく構成できるため、このような場合は「If」アクションの利用がより適していると判断されます。
「Switch」はより多い分岐向け
前項での通り、「Switch」アクションは「Case」アクションとの組み合わせが必須のため、「If」と比べてアクションの配置数が多くなってしまいます。
一方、「Switch」アクションはどの条件判定にも「Case」アクションが使われる(Ifでは最初が「If」で2つ目以降が「Else if」と使い分ける)ため、複数配置された条件も見やすく、動作が把握しやすい構成にできる点がメリットでもあります。
条件分岐の多いフローでは、それぞれの条件を見渡しやすく構成するため、「Switch」アクションの利用がより適していると判断されます。
この「if」「switch」は多くのプログラム言語でも利用される構文ですが、特にプログラム言語では構文の使い分けが記述量、読みやすさに大きく影響します。
例えば、「if」文の場合は「else if then」という記述に対して、「switch」文では「case」と書けば良い、などコード自体の文字数を少なく記述できる点などの違いもあるため、記述量の影響が大きく現れます。
Power Automate Desktopでは構文の長さによる影響はあまりありませんが、これらのプログラミング言語の通例などもあり今回のような使い分けをご紹介しました。
その他の条件アクションの機能と設定方法
個別の条件アクションはIfアクションと同じように動作する
「If」「Switch」の条件アクション以外にも「画像が存在する場合」「テキストが画面に表示される場合」「ファイルが存在する場合」などの条件アクションがありますが、これらのアクションについては「If」アクションと同じ構造で動作します。
Switchアクションのように「Aの場合、Bの場合、Cの場合」のような簡単な分岐のフロー設定ができないため、このような場合は複数の条件アクションを使ってフローを構成します。
その他の条件アクションの機能と設定方法について
ここまででPower Automate Desktopの条件アクションの基本的な使い方について解説しました。
ページが長くなってしまったため、その他の条件アクションについては別のページで解説しています。
- Webページに次が含まれる場合
- ウィンドウが次を含む場合
- サービスが次の場合
- テキストが画面に表示される場合(OCR)
- ファイルが存在する場合
- フォルダーが存在する場合
- プロセスが次の場合
- 画像が存在する場合
- ウィンドウが次の条件を満たす場合
の条件アクションの機能詳細と設定方法、サンプルについては「条件(〇〇の場合)アクションの使い方。PADならではの条件判定、サンプル紹介」をご覧ください。
まとめ
Power Automate DesktopではプログラムでもなじみのあるIf、SwitchアクションのほかにもPower Automate Desktopならではの画像やUI要素、ファイルの有無などの判定条件が使える自動化フローに適した条件アクションも用意されています。
条件分岐アクションは入れ子構造などを使うことでさらに複雑な条件分岐を作ることもできますが、フローの読み取りやすさ(可読性)や変更のしやすさ(保守性)を下げてしまう要因にもなるため、組み合わせには注意が必要です。
また、IfとSwitchの使い分けやアクションの使い方の工夫によって同様の処理を行うことができるフローはいろいろな方法で組み立てることができますので、より扱いやすいフローを組み立てていくことがポイントです。
初めのうちは扱いやすいアクションを組み合わせてフローを作ってみて、その後、フローの設計に慣れてきたら複雑な条件分岐を使い分けて組み立てていくのが良いと思います。
クラベルではほかにもテンプレートとして使えるPower Automate Desktopのフローサンプルを解説付きでご紹介していますのでぜひ参考にしてみてください。
お読みくださりありがとうございました。今回の内容が少しでもお役に立てば幸いです。
コメント