初めてRPAツールを触る方や基本的なプログラミング学習向けに、Power Automate Desktop(PAD)の変数の種類や違いについて解説しています。ご自身の環境で動作可能なフローのテンプレートも交えて説明していますので、Power Automate Desktopを使った自動化フローを作る際の参考にしてみてください。
マイクロソフトの無償RPA(自動化ツール)である「Power Automate Desktop(PAD)」での変数の基本的な知識について解説しています。
自動化フローを作る際、各アクションの情報はさまざま変数に格納されます。この変数を他のアクションで利用することなどでより安全に動作するフローを作ったり、できる機能を広げることなどができます。
無料自動化ツールの「Microsoft Power Automate Desktop」について、そもそもの解説や導入方法についてはPower Automate Desktop解説コンテンツまとめからお読みいただくと基本的な使い方などを確認できます。
変数とは
変数はプログラム全般で一般的に使われる要素ですが、初めてPower Automate Desktopを触れる方には少しその動作や使い道がわかりにくいかもしれません。
変数とは、データを一時的にしまっておく箱のようなもの。
文字や数値のほか、いろいろなデータを保管してフローの中で利用します。
Power Automate Desktopでは、いろいろなアクションを使うときに変数が作られ、その変数を使うことで状況によって異なるフローを動作を行わせるようなことができます。
変数は何のために使うもの?
いろいろなデータをしまっておくことができる変数ですが、実際のフローで変数は何のために使われるのでしょうか。
ここでは、以下のような作業をPower Automate Desktopで自動化することを例として、変数の使われ方について説明します。
- 『あ行のアドレス帳』のExcelファイルを読み取る
- Excelのデータをリストに読み取る
- リストの項目の「メールアドレス」と「最終送信日」を読み取る
- もし現在の時刻が最終送信日より7日以内であればステップ5を飛ばす
- メールアドレスに通知メールを送信する
- 最後に、送ったメールの数を画面に表示する
※ステップ1で、『あ行のアドレス帳』というExcelファイルを開くという動作を行っていますが、ここでは『あ行のアドレス帳』のほかに『か行のアドレス帳』や『さ行のアドレス帳』などの複数のアドレス帳があると想像してください。
アクション同士の情報伝達に使用する
前述の例では、各アクションの結果として読み取ったデータを次のステップのアクションで使用しています。
- 『あ行のアドレス帳』のExcelファイルを読み取る
- Excelのデータをリストに読み取る
- リストの項目のメールアドレスの文字を読み取る
- …
- メールアドレスに通知メールを送信する
Power Automate Desktopでは、この受け渡しのために使われる「Excel」「リスト」「メールアドレス」のような情報が変数として扱われます。
このように、アクションとアクションの間でバケツリレーのように渡されていくデータとして変数が使われます。
ポイントとして、このように変数で管理されたフローは全体を通して初めに読み取るExcelファイルによってそれ以降の動作が正しく変わる、ということが挙げられます。
『あ行のアドレス帳』を『か行のアドレス帳』に変更した場合でも、それ以降のステップで作られるデータはただのバケツリレーのバケツの中身でしかないので、動作に影響を与えません。
アクションの結果を参照して動作を切り替える
前述の例では、ステップ3で取得した日時の情報を使って、ステップ4のアクションを判定しています。
- リストの項目の「メールアドレス」と「最終送信日」を読み取る
- もし現在の時刻が最終送信日より7日以内であればステップ5を飛ばす
取得したデータを条件アクションなどで参照することで、フローを分岐させたり、大量のデータを1件ずつ処理することなどができます。
「もし〇〇ならば、〇〇する」というような動作は条件アクションと呼ばれます。
Power Automate Desktopの条件アクションの詳細について、詳しくは以下をご覧ください。
数値の計算や文字の加工をして保管する
前述の例では、日付の情報を使って「最終送信日より7日以内」という日付の計算を行っています。
- もし現在の時刻が最終送信日より7日以内であればステップ5を飛ばす
このように、数値の計算や日付時刻の計算、文字をつなぎ合わせたりするような加工なども変数を使って行うことが可能です。
そして、前述の例では、ステップ6に「送ったメールの数」を画面に表示しようとしています。
- 最後に、送ったメールの数を画面に表示する
このような、それぞれのアクションでは管理されていない数字や文字の情報なども、自由に変数を作って管理することができます。
ただし、この例では送ったメールの数の情報を変数に保管するためのアクションが不十分です。
実際に変数を使って送ったメールの数を画面に表示できるようにするには、最終的に以下のようなフローの想定になります。
- 「送信メール件数」を保管する変数SendCountを作り、値を0にする。
- 『あ行のアドレス帳』のExcelファイルを読み取る
- Excelのデータをリストに読み取る
- リスト全体から1行ずつデータ行を取り出し、ステップ5~8までを繰り返す。
- データ行の項目の「メールアドレス」と「最終送信日」を読み取る
- もし現在の時刻が最終送信日より7日以内であればステップ7、と8を飛ばす
- メールアドレスに通知メールを送信する
- SendCount変数の値を1大きくする。
- 最後に、SendCountを画面に表示する
ここでは「SendCount」という変数にメールを送信した回数を記録して保管しておくことで、最後に画面に表示できるようにしています。
初めの例との違いを比べてみてください。
「ステップ5~8までを繰り返す」のような繰り返し、反復処理をおこなう動作はループアクションなどと呼ばれます。
Power Automate Desktopのループアクションの詳細について、詳しくは以下をご覧ください。
このように、変数を作ったり計算や加工を行ったりすることで、フロー全体の動作を管理、コントロールすることができるようになります。
変数の特性、注意点
Power Automate Desktop変数を使うにはいくつかのポイントがあります。
フローを組み立てる際に間違いやすい注意点などもありますので、これらの特性についてもチェックしてください。
変数はそのフローが実行されている間だけ保管される
変数の中身はそのフローが実行されている間だけ作成、保管され、フローを停止することでクリアされます。
セーブデータのようにどこかに変数の情報が恒久的に保存されているわけではないので、大量の繰り返し処理を途中で停止し、改めて続きから実行するというような用途には使用できません。
このような場合は、処理の結果や過程を何らかのデータとしてファイルなどに保存し、そのデータを実行のたびに読み取って続きから開始できるようにするフローなどを作る必要があります。
Power Automate Desktopにはフローの「一時停止」を使って、一時的にフローを止めて再開させることは可能です。
(この時に変数の内容はクリアされません)
一方、大量の処理を途中で停止しその続きから実行できるようにするための標準的な機能などはPower Automate Desktopにはありませんが、このようなフローもアクションを組み合わせることによりアイデア次第で実現できます。
変数はサブフローでも共通で使用される
変数はメインフロー、サブフローにかかわらず、フローの中のどこででも作ることができますが、フローをまたいだ変数の利用については注意が必要です。
Power Automate Desktopでは、メインフロー、サブフローで共通のフローが使える(変数の設定、参照、変更が行える)ようになっています。
例えば、メインフローで作った変数の内容をサブフローのアクションで読み取ったり、サブフローで作った変数の値をメインフローで変更することなどが可能です。
これは一見して便利ではあるのですが、変数に自由に名前を付けて管理していると、フローの中に違う用途で同じ名前の変数を作ってしまうことなどがあり、それによりフローが意図した動きにならないようなことがあります。
このような時、Power Automate Desktopではエラーメッセージなどを表示することもなくフローを実行しようとします。サブフローなどを複数使った複雑なフローなどでは、このような変数の重複(バッティング)による誤動作が起きたような場合に気づきにくくなってしまうため、変数の命名は重複しないように注意が必要です。
プログラム言語によっては、サブフローのような処理のブロックの中だけで使うことができるような変数が利用できるものも多くあります。
このようなサブフローの中だけで使われる変数のことを「ローカル変数」、プログラム全体のどこからでも使うことができる変数のことを「グローバル変数」などと呼びます。
Power Automate Desktopでは利用者が設定できる変数はすべて「グローバル変数」として扱われています。
(わかる方向け)
Robin言語の仕様では関数(Function構文)内の変数はローカルで定義され、グローバル変数は変数名の前にg:
をつけることで定義できる、とされています。
set g:name to '''hogehoge'''
しかし、Power Automate Desktopではサブフロー(Functionで構成されていると思われる)に配置した変数がローカル変数の宣言であるにもかかわらず、メインフローや他のサブフローからも参照できてしまいます。
SET NewVar TO $'''hoge'''
この辺りは筆者も厳密な仕様がよくわかっておらず、解説は実際の挙動を参考に行っています。基本的に変数はグローバル参照と考えておけば事故はないと思いますが、、、もし情報がございましたら是非教えてください。
また、詳しい解説(ソースコード付き)は以下で行っています。ご興味ある方はご覧になってみてください。
どんな種類の変数も格納することができる
次の「変数の種類」の項で解説しますが、変数にはいくつかの種類があります。
これらの変数は、始めに指定した種類とは関係なく、フローの中で別の種類の内容にも置き換えることができます。
例えば、Power Automate DesktopでExcelのワークシートを読み取ると、データテーブル型と呼ばれる種類として変数の中に情報が格納されます。しかし、その後のフローでその変数に「0」などの数値型のデータを上書きすることも可能です。(データテーブルの中身は無くなってしまいます)
このようなとき、Power Automate Desktopでは特にエラーの表示などは発生せずそのままフローの動作が続きます。
そのため、本来はそのまま使おうとしていたExcelのデータが、もし別の情報で上書きされて動作に問題が発生したような場合、発生個所が特定しにくくなってしまうようなことがあります。
プログラム言語によっては、プログラムの動作をより安全で厳密にするため、種類(型)の異なる変数は上書きできなようにされているものが多くあります。
Power Automate Desktopはより扱いやすいように変数を自由に変更できるようになっていますが、その一方で問題が発生した時にわかりにくくなってしまうこともありますのでご注意ください。
変数の種類
Power Automate Desktopで扱うことができる変数には、いくつかの種類があります。
ここではこれらの変数の種類と違いについて説明します。
一般的な数字や文字列(テキスト型と数値型)
文字の情報や数値の情報を格納した変数です。
一般的な変数は、変数カテゴリの「変数の設定」アクションから作ることができます。
文字は複数文字の文字列だけでなく、複数行で構成されたテキストデータなども格納することができます。
また、数値を変数に格納した場合、その数値とほかの数値をつかった計算などを行うことなどが可能です。
日付時刻(datetime)型
日付時刻の情報を格納した変数です。
日付時刻(datetime)型の変数は日時カテゴリの「現在の日時を取得します」アクションから作ることができます。
また、「テキストをdatetimeに変換」アクションを使うことで、文字列の内容を基に任意の日付時刻型の変数に変換することなどが可能です。
日付時刻型は一般的な変数とは異なり、日付の情報から曜日の情報を簡単に取り出したり、日付時刻の計算をより簡単にしたりする便利な機能などを利用できることが特徴です。
リスト(リストデータ型)
リスト化された値を扱うことができるデータ型。
複数行のテキストを格納して一行ずつ処理することなどができます。
リスト変数は変数カテゴリの「新しいリストの作成」アクションから作ることができます。
また、リストは各行、各列に対しての操作を行うことも容易で、並べ替えやシャッフル、複数のリストの結合などを簡単なアクションから行うことができます。
一般的なプログラム言語での「配列」とほぼ同じものがこのリストデータ型です。
データテーブル型
主にExcelのデータを読み取った際に扱われる変数です。
Excelのリストなどと同じように、行列の表に加えて見出しなどが設定されたデータテーブルの情報を格納することができます。
データテーブル型の変数は、Excelカテゴリの「Excelワークシートから読み取り」アクションなどから作ることができます。
また、For Eachアクションでは見出しをスキップしてデータ行だけを処理対象とすることができるため非常に便利です。
カスタムオブジェクト
カスタムプロパティなどを使用できるデータ型。主にJSONデータの格納、参照などに利用されます。
プロパティを指定して、さまざまな階層化された値を参照することなどができます。
カスタムオブジェクトは変数カテゴリにある「JSONをカスタムオブジェクトに変換」アクションなどから作ることができます。
%CustObjectVar.Country%
などとすることでオブジェクトの持つプロパティの値を参照することができ、JSONなどの階層構造を持つドキュメントなどをコントロールすることができます。
リスト、データテーブル、カスタムオブジェクトの特徴として、For Each
というアクションを使うことで、データひとつひとつに対しての繰り返し処理を非常に簡単に行うことができる、という点があります。
これらの変数を使った繰り返し処理のフローのサンプル、解説については以下をご覧ください。
ブール型
ブール(bool)とは、「true(真)」か「false(偽)」かの2通りいずれかを示す値のことで、プログラムでは条件判定などにこの情報が使われます。
例えば、いろいろな設定画面などにある「チェックボックス」には「チェックされている」か「チェックされていない」かの2つの状態を指定することができます。
このような2つの状態を表したり、他にも「〇〇と〇〇が等しいか否か」というような、変数同士の比較結果を格納したりするためなどにブール変数が使用されます。
ブール型の変数自体を新たに作る機会は少ないかと思いますが、アクションの中での条件判定などに使われることがあります。
変数はどこにある?
自分で変数を作る
Power Automate Desktopの変数は、「変数の設定」アクションや、「新しいリストの作成」アクションなどを使って作ることができます。
また、前項の解説の通り、Power Automate Desktopの変数はアクションによって複数の種類の変数を作ることが可能です。
これらは扱いたいデータの形式や、自動化するフローの目的などに合わせて選択します。
アクションの結果で自動的に作られる変数
また、多くのアクションではそのアクションの実施結果として変数を作るものが多くあります。
これらは、アクション設定画面の「生成された変数」で確認することができます。
上記の画面の例では、「Result」という名前の変数にアクションの結果が格納されます。
変数の状態は画面上から確認できる
また、フローで使われているすべての変数の一覧はフロー編集画面の右にある「変数」エリアに表示されます。
この一覧にはフローを実行したときに実際の変数に格納された値が表示されるため、動作確認をする際などに非常に便利です。
変数を使って文字列の操作と計算を行うサンプル
最後に、簡単な変数の操作を行うPower Automate Desktopのサンプルフローをご紹介します。
今回は、簡単なゲームを題材に変数の使われ方を確認していきます。
サンプルフローについて
これは、ランダムに表示される最大3桁の数字の足し算を行うPower Automate Desktopで動くゲームのサンプルフローです。
フローを実行すると、「〇〇+〇〇 = ?」というメッセージとともに入力テキストボックスが表示されます。
テキストボックスが表示されたら、その計算式(〇〇+〇〇)の答えをできるだけ早く入力してください。
テキストを入力してOKをクリック(もしくはEnterキーを押す)すると、計算結果と入力内容の判定が行われ、正解もしくは不正解のメッセージが表示されてゲームが終了(フローが終了)します。
出題される計算式は毎回異なります。
ちょっとしたゲーム要素として、答えを入力するまでの時間を変数を使って計測し、それを結果に表示していますので、答えるまでの時間を競えるようなものにしています。
表示される数値が毎回ランダムで1桁の場合もあるので難易度が毎回異なりますが、この辺りはサンプルということで大目に見てください。
サンプルフローのスクリーンショット
作成したフローのスクリーンショットです。
編注:今回のサンプルでは、ランダムな数値を取得するために「ランダムテキストの作成」アクションと「テキストを数値に変換」のアクションを使用していますが、本来ランダムな数値を取得するための「乱数の生成」というアクションが存在します。
(執筆時に見落としていました。すみません。)
また、この「乱数の生成」アクションは1度に複数の乱数を作ることもできるため、今回のサンプルフローに「乱数の生成」アクションを使うことで、よりシンプルなフローを作ることも可能です。
Robin言語ソースコード
以下は今回のサンプルのRobin言語ソースコードです。
コードをコピーし、Power Automate Desktopの編集画面に張り付けると今回のフローのアクションをそのまま登録することができます。
Text.Random UseUpperCaseLetters: False UseLowerCaseLetters: False UseDigits: True UseSymbols: False MinimumLength: 3 MaximumLength: 3 RandomText=> RandomTextA
Text.ToNumber Text: RandomTextA Number=> RandomNumberA
Text.Random UseUpperCaseLetters: False UseLowerCaseLetters: False UseDigits: True UseSymbols: False MinimumLength: 3 MaximumLength: 3 RandomText=> RandomTextB
Text.ToNumber Text: RandomTextB Number=> RandomNumberB
DateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> StartDateTime
Display.InputDialog Title: $'''問題!''' Message: $'''%RandomNumberA% + %RandomNumberB% = ?''' InputType: Display.InputType.SingleLine IsTopMost: False UserInput=> UserInput ButtonPressed=> ButtonPressed
DateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> EndDateTime
SET Answer TO RandomNumberA + RandomNumberB
DateTime.Subtract FromDate: EndDateTime SubstractDate: StartDateTime TimeUnit: DateTime.DifferenceTimeUnit.Seconds TimeDifference=> TimeDifference
IF UserInput = Answer THEN
Display.ShowMessage Title: $'''おめでとうございます''' Message: $'''すばらしい!正解です!
%RandomNumberA% + %RandomNumberB% = %Answer%
経過時間は%TimeDifference%でした。''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
ELSE
Display.ShowMessage Title: $'''残念''' Message: $'''不正解です!残念!
%RandomNumberA% + %RandomNumberB% = %Answer%
経過時間は%TimeDifference%でした。''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
END
Power Automate Desktopでフロー共有する方法、共有されたコードの利用の詳細については作成したフローを他のユーザーに共有する方法でも解説しているので、併せてご参照ください。
各アクションの解説
ランダムテキストの作成
問題を構成する2つの数字は「ランダムテキストの作成」アクションを使って作っています。
本来このアクションはパスワードの生成などに使用されるものですが、生成する文字を数字だけにすることでランダムな数値を作ることができます。
ランダムテキストの作成はステップ1とステップ3の2か所で行っていますが、それぞれのアクションでは生成された変数を%RandomTextA%
、%RandomTextB%
と、異なる名前を付けておきます。
テキストを数値に変換
ランダムテキストの作成アクションで数値が作れる、と前項で説明しましたが、実際にこのデータを数値として使用するにはもうひとつ、「テキストを数値に変換」アクションを実行します。
こちらもランダムテキストの生成のあとに2回実行し、数値の変数を作っています。変数名はそれぞれ%RandomNumberA%
、%RundomNumberB%
とします。
現在の日付を取得します
ステップ5とステップ7では「現在の日付を取得します」アクションを使ってその時の日時を取得しています。
それぞれのアクションでは取得した日時を%StartDateTime%
、%EndDateTime%
という変数に格納します。
これにより、ステップ6でユーザーから回答が入力されるまでの間に経過した時間を計測することができます。
実際はPower Automate Desktopのシステム側の実行遅延などの影響もあるので、ミリ秒単位の計測にはずれが発生します。
入力ダイアログを表示
問題の出題とユーザーからの入力受付は「入力ダイアログを表示」アクションを使用します。
「入力ダイアログメッセージ」ボックスには%RandomNumberA% + %RandomNumberB% = ?
と入力します。
画面表示などに変数を使いたい場合、変数の%~%
をそのまま記述することで、フローを実行したときに自動的に変数の内容に置き換えられて表示されます。
変数の設定
ユーザーから答えの入力が終わったら、判定のための答えを計算して変数に格納します。
ここでは「変数の設定」アクションを使用します。
「設定(変数名)」は%Answer%
とし、「宛先(変数の値)」は%RandomNumberA + RandomNumberB%
とします。
ここで、「宛先(変数の値)」が%RandomNumberA + RandomNumberB%
となっている(%RandomNumberA% + %RandomNumberB%
ではない)ことに注目してください。
変数同士の計算を行うような場合、計算式などはすべて%~%
の内側に記述します。
これにより、%RandomNumberA%
と%RandomNumberB%の
を合計した値が%Answer%
という変数に格納されます。
日付の減算
解答までにかかった時間の計算は「日付の減算」アクションを使って行います。
If(条件)
ユーザーが入力した数字が正解かどうかを判定するには「If」アクションを使用します。
ここでは、ステップ6でユーザーが入力した内容(の変数)とステップ8で実際に計算した答え(の変数)が等しいかどうかを比較しています。
ここで2つの変数の値が等しい場合とそうでない場合で、正解、不正解のメッセージを表示するアクションへと分岐しています。
メッセージを表示
最後に、正解の判定結果に従ってメッセージを表示します。
ステップ11が正解メッセージ、ステップ13が不正解のメッセージとなっています。
下記が正解メッセージです。「表示するメッセージ」は以下のように入力します。
すばらしい!正解です!
%RandomNumberA% + %RandomNumberB% = %Answer%
経過時間は%TimeDifference%でした。
そしてこちらが不正解のメッセージです。「表示するメッセージ」は以下のように入力します。
不正解です!残念!
%RandomNumberA% + %RandomNumberB% = %Answer%
経過時間は%TimeDifference%でした。
以上でサンプルフローの完成です。
実際にPower Automate Desktopで動作させてみて、変数の状態の変化や計算式の記述などをチェックしてみてください。
まとめ
Power Automate Desktopでの変数の種類の違いにや特性について解説しました。
今回の解説のようにPower Automate Desktopでは文字や数字を変数として格納し、いろいろなアクションで使いまわすことができるほか、変数どうしをつなげたり、計算を行って新しい変数を作ったりすることができます。
また、今回は基本的な部分のみを解説しましたが、変数の機能はこれだけでなく、UI要素(画面上のリンクやテキストボックスなど)やWebブラウザやアプリのウィンドウなども「変数」として扱うことができ、ウィンドウの状態変化を調べてフローを分岐させたり、プログラムの起動や終了を行ったりもできます。(アクションやインスタンス)
クラベルではほかにもテンプレートとして使えるPower Automate Desktopのフローサンプルを解説付きでご紹介していますのでぜひ参考にしてみてください。
お読みくださりありがとうございました。今回の内容が少しでもお役に立てば幸いです。
コメント