変数について

PowerAutomateDesktopでの変数の基本的な話

PowerAutomateDesktopでは、変数が利用できます
変数には型の指定は存在しません
VBAのような型指定は行わずに、変数の名前のみ設定を行います

また、独自の仕様として変数名は自動的に作成されます
ほとんどの場合においてはこの変数名をそのまま利用する方がコードの可読性は上がりますので、そのまま利用して問題ありません
同じ名前があった場合は自動的に連番が付与されるので、変数名の重複は発生しません

フロー変数

フロー変数とは、PowerAutomateDesktopで作成するフロー内でのみ有効な変数となります
他のフロー実行時には当然影響を与えないものです

このフロー変数は、フロー単位のためサブフローを作成していたとしてもそこは共通となりますのでそこに関しては注意が必要です

まずは実際の作成を行ってみます
返し値を持つアクションであれば、自動的に作成が行われます

作成された変数

今回は「マウスの位置を取得します」アクションを利用してみます
このアクションは実行された時点でどこにマウスカーソルがあるかを返すアクションです
返された値は変数に格納されます
VBAでいうようなアクションの中にアクションを入れて、返し値を計算等にそのまま利用するような作成は行えません
返し値は全て一旦変数に格納する必要があります

このアクションでは、マウスのXとYの位置を数値で返します
2つの値を返すので変数も自動的に作成されるものが「MousePosX」「MousePosY」が作成されます
画像の右側に作成されていることが確認できます
変数の名前からも容易に用途が分かるようになっています

変数名の設定画面

アクションの設定画面の一番下に変数の設定があります
「生成された変数」を開くと、各変数の詳細が確認できます
ここできちんと変数の解説がされているので、改めて変数に入るものがなんなのか確認しやすくなっています

設定を変更した状態

変数の名称の箇所をクリックすると変数の名称を変更可能です
また返し値が不要な場合は無駄な変数が作成されて一覧が煩雑になるので
変数の生成を抑止できます
その場合は、トグルボタンを切り替えることでグレーアウトして作成がされなくなります

変数の変更を保存した状態

画像の様に設定変更を行うことで、フロー変数が任意の状態に設定されていることが確認できます
このようにして、変数の自動作成には対応を行っていきます

処理実行した後の状態

この変数一覧は内容の確認も行えます
実際に処理を実行してみると、変数に格納された値が表示されます
デバッグ時などに確認します

また、下部にある消しゴムボタンをクリックすると全ての変数を一括してクリアできます

簡易設定

パスワードなどデータが見えてしまうと困るようなものの場合は、マウスオーバーで表示される帽子とメガネマークをクリックすることで内容が表示されないようになるモードもあります

基本的にPowerAutomateDesktopは自分のための自分で作成した処理なので通常は気にしなくても良いですが、このサイトの様に説明を行う場合などには活用できます

活用メニュー

また右クリックでも表示されるメニューから「使用状況の検索」を実行すると
画像の下側にあるような変数が使用されているアクションの一覧が表示されます

何らかの理由で変数を置き換えたり、削除したりする場合には事前に漏れなく確認を行うことが可能です

入出力変数について

入出力変数とは、このフローの外部とやり取りをすることの出来る変数となります
いわゆる引数となります

前述していますが、あくまでも外部のフローとのやり取りに使用するものであり
メインフローとサブフロー間でやり取りするようなものではありません
つまり、単独で実行されるフローには一切作成の必要は無い変数になります
またフロー変数と違い自動的に作成されることはありません

まずは作成を行ってみます

作成ボタン

作成する画面は、画像の+ボタンをクリックすると入力か出力かの選択肢が表示されます
まずは入力を選択してください

入力変数の設定画面

入力変数では主に設定するのは変数名と既定値です

変数の種類とデータの種類についてはここでは変更できませんので初期値で問題ありません

「変数名」はこのフロー内で利用する際の名称です
「外部名」はこのフローを呼び出す際の設定画面に表示される名称です
ここは後述します

「既定値」はフローの呼び出しの際の未入力時のデータです
処理のエラーリスクを考慮すると、何らかの設定はある方が良いでしょう

「説明」は呼び出しの際の変数の説明に表示されます
変数名が紛らわしい場合は記載しても良いです

出力変数の設定画面

出力変数は設定項目はほとんど必要ありません
格納されるデータによって型が決まるので、型指定も存在しないです

とにかく、外部から分かりやすい記載をしていれば大丈夫です

そして今回テスト処理としてはこのフローは引数に渡された数値に1.1を積算して返す、いわゆる消費税込み金額の計算処理とします
VBAでもよくある処理ですね

SET NewOutput TO NewInput * 1.1
作成するアクション

変数の設定をするアクションで計算を実行します
出力変数に入力変数から計算を行い格納しています

これで一旦フローを名前を付けて保存を行います
とりあえず名前は「消費税計算」とします

このフローは一旦閉じておいてください
※ここまでに作成したフローとは別のフローで作成を進めてください
次に新規でフローを作成して、以下のアクションを作成します

@@flowname: '消費税計算'
External.RunFlow FlowId: 'e5450efa-1d40-4c88-ab9e-73324cb03d41' @NewInput: 100 @NewOutput=> NewOutput
アクションの設定画面

外部フローを実行するには、「Desktopフローを実行」から行えます
「Desktopフロー」では環境にあるフローが自動的にリスト表示されます
なので先ほど作成して保存した「消費税計算」を選択します

選択すると、同期されて入力変数が反映されます
画像の通りで作成した「NewInput」が表示されます
この変数の右側にある情報ボタンにマウスオーバーさせると、説明に記載した文章が表示されます

テストのために、引数に渡す数値を「100」に設定します
設定が完了したら処理を実行してみましょう

計算結果

処理を実行すると、変数に計算値が格納されています
数値は引き渡した数値「100」に1.1の積算で「110.0」が返されています
小数点数値が表示されているので、変数の型が実数になっているようですね
元々「消費税計算」の引数ではString型でしたが、普通に数値計算出来るし
返し値は数値となっています

型の確認も出来ないので、結果をみて判断するしかないですが
実数か整数かはあまり影響は無いとは思いますがそれ自体はこのフローで処理を行えばよいだけですね

Excelで空白になるまでセル参照ループする

PowerAutomateDesktopでExcelのセルを参照していくループ処理

Excel.GetFirstFreeColumnRow Instance: ExcelInstance FirstFreeRow=> FirstFreeRow
LOOP LoopIndex FROM 1 TO FirstFreeRow STEP 1
    Excel.ReadFromExcel.ReadCell Instance: ExcelInstance StartColumn: 1 StartRow: LoopIndex ReadAsText: False CellValue=> ExcelData
    IF IsEmpty(ExcelData) THEN
        EXIT LOOP
    END
    # ここにセル値(ExcelData)での処理内容を作成する
END

PowerAutomateDesktopで開いたExcelのアクティブシートの指定列のセルを1セルずつ参照していく処理になります
Excel表データの自動化の基本中の基本の処理になります

事前にExcelを開いて、シートのアクティブ状態は設定した状態で使用します

アクション解説

アクション作成時

処理の最初に、空白行数値を取得しています
この数値をループ処理の終了判定とします
ちなみにアクションとしては行と列の両方を取得出来るアクションですが
今回の処理に列数値は必要ないので除外しています

次にループ処理に入ります
上記で取得した数値まで1ずつ加算しながら処理を行います
ループ内ではExcelからループで加算している変数の行数値にあるデータを取得しています
この内容によってなんらかの処理をさらに作成を行っていく形となります
またループの終了条件としてセルが空白かどうかも追加しています
通常実行であればそれほど大きな時間はかからないかもしれませんが、必要ないなら終了してしまいます

この一連のアクションで設定すべき箇所はあまり多くありません
参照列と開始行の指定くらいです

それ以外の少しの改変で応用できる部分は1行ずつ処理するかどうかや空があっても最終行まで処理を行うかなどになります

指定列の変更について

列の設定画面

列の指定には、3行目の「Excelワークシートから読み取り」の設定を変更します
この設定項目のうちの先頭列が列指定になります

今回の処理では単一セルの値を取得しているので、先頭列という名称にはほぼ意味は無いので、指定列数値と置き換えて考えてください

ここは数値になるので、アルファベットでの指定は出来ません
A列なら1、C列なら3といった具合で指定を行います

今回のコードでは1となっているので、A列が指定されていることになります

行の設定について

行に関する設定

行の設定については2つの用途があります
設定は2行目の「Loop」の設定を行います

まず「開始値」ですがここの数値がセル参照の初期セルとなります
今回のコードでは1となっているのでA1から参照が始まる形になります
ですが、だいたい見出しがある場合があるかと思いますので
その場合には実データの行数値を指定する必要があります

処理対象

例えば、画像のような表データを参照したい場合は見出しが2行目で実データは3行目から始まっています
なので、開始値の数値を「3」に設定する必要があります

次に「増分」ですが、この数値を増加させることで1行ずつの処理では無く
1行飛ばして処理を行ったりすることが可能になります
表データの場合はあまり変更することはないかもしれませんが
複数行を1つのデータとして表が作成されているようなものの場合にはこの設定が必要となります

空白の場合の終了判定について

ループ処理を行う際に、途中に空白セルが存在する前提がある場合は
途中で処理が終了してしまうことになってしまいます
そんな場合は空白で終了する判定を無くす必要があります

ここは設定では無く、4~6行目のIF処理をそのまま削除すれば良いだけです

削除した状態

画像のような形になればOKです

この処理についてはインスタンス表示が無くても可能な処理なので
完全バックグラウンドで処理を実行することが出来ます

安心感のあるゴミ箱を空にする方法

PowerAutomateDesktopを活用して不要ファイルを一定期間復活可能な状態で削除する方法

/# F_Name_1=常に処理時に空にしたいフォルダの絶対パス
F_Name_2=OneDrive上に作成したゴミ箱フォルダの絶対パス#/
SET F_Name_1 TO $'''空にするフォルダの絶対パス'''
SET F_Name_2 TO $'''OneDriveのゴミ箱の絶対パス'''
BLOCK Get_Err
ON BLOCK ERROR all

END
    Folder.GetFiles Folder: F_Name_1 FileFilter: $'''*''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files
    LOOP FOREACH CurrentItem IN Files
        File.Move Files: CurrentItem Destination: F_Name_2 IfFileExists: File.IfExists.Overwrite
    END
    Folder.GetSubfolders Folder: F_Name_1 FolderFilter: $'''*''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Subfolders=> Folders
    LOOP FOREACH CurrentItem IN Folders
        Folder.Move Folder: CurrentItem Destination: F_Name_2
    END
    Folder.Empty Folder: F_Name_2
END
ERROR => LastError
IF LastError <> $'''エラーはありません''' THEN
    Display.ShowMessageDialog.ShowMessage Title: $'''PowerAutomateDesktop''' Message: $'''ファイル整理が失敗しました''' Icon: Display.Icon.ErrorIcon Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True
END

フローの最初にある変数の修正をしてください

不要ファイルは毎日発生します
本当の意味での不要ファイルというものは存在せず、その内容自体は機密事項であったり個人情報があって他人に知られるのは困ってしまう情報が含まれたファイルがほとんどです

会社のセキュリティルールによっては定期的に不要ファイルの削除を行うようになっていることもあると思います

しかし、ゴミ箱に放り込んだファイルを完全に削除する操作は少し躊躇することが多々あります
なぜなら完全削除した後に、やっぱりあのファイル必要だった!とか再確認だけしたかった!とか一時的でも復活して欲しいことが懸念としてあるからです

これは結構ネックに感じてしまう部分です
かといって長期間ゴミ箱を空にせずにおくこともルール違反になってしまうし
ゴミ箱の自動削除設定で削除すると復元が大変です

要するにゴミ箱は常に空にしつつ、削除したファイルは一定期間は復元出来る状態にしておきたい、というすごくわがままな考えを抱くのが自分だけでしょうか!?
いえ、これがあるとめっちゃ出遅れてもう無くなってしまったと諦めていた人気商品がまだあった時の感動と同義です!
この記事の方法で、会社の情シスの人や上司にはちゃんと空になったゴミ箱をこれ見よがしに見せつけてください
後述の方法で、一定期間は復元可能なので毎日の削除作業も気楽なもんですよ!

OneDriveを活用する

結果から言いますと、OneDrive上で削除を行うという方法になります
OneDriveは削除されたデータは、通常アカウントでは30日・職場などのアカウント等の場合は93日(管理者で変更可能)の間は復元が可能な状態でゴミ箱に格納されます

ゴミ箱からは削除しておいて、こちらでバックアップを取っちゃおうというものです
OneDriveのクラウド上であれば必要な時に復元するのもデバイスを選ばず行うことが可能なのも今の時代にあっていて良いと思います

しかし、単純にExplorerでOneDriveのファイルを削除してもゴミ箱に行ってしまいますし、削除のためにいちいちWebアプリを起動するのも面倒です

そこでPowerAutomateDesktopを活用します
今回のフローでは同時に不要ファイルがたまりやすいダウンロードフォルダも空にするようなフローにしています

いや、ダウンロードフォルダは空にせんでええですよ
余計なことまでしないで下さいという人は下のコードだけで良くなります

Folder.Empty Folder: $'''OneDrive上に作成したゴミ箱フォルダの絶対パス'''

OneDriveの指定フォルダを空にするアクションです
ただこんだけになります

いや、やっぱりダウンロードフォルダも空にしたいねん、という人は引き続き記事確認を行ってください

フローの流れについて

変数設定アクション

フローの流れですが、途中に幾度か対象フォルダのパスが出てくるので最初に変数でダウンロードフォルダとゴミ箱フォルダの絶対パスを変数に取得します
これ以降は変数で対象フォルダの指定を行います

エラー処理

4行目からのエラー処理です

エラー処理終端

14行目までを包括する形に設定しています
これはファイルの移動や削除の処理がファイルの編集権限であったり、使用中による削除不可という状況が往々にして発生することを考慮して後続のエラーメッセージ用に設置しています

この4行目のアクションではエラーが発生した場合は処理を継続してかつ14行目から実行するようにしているため後続処理が実行されます

ちなみに処理的には移動できなかったとか、削除できなかったとか、フォルダパス構成が違っていたとかの原因についてはどうでも良いと考えます
単純に削除したつもりがされていなかった状況を回避できれば十分なので
後続でエラー内容の判定までは行っていません

ファイルの移動アクション

ダウンロードフォルダにあるファイルを全てゴミ箱フォルダに移動させます
ちなみにファイルとフォルダを同時に移動させるアクションが無いので、ファイルとフォルダをそれぞれで行う必要があります
まずはファイルの移動を行っています

フォルダの移動アクション

次にフォルダの移動も行います
中のデータはそのまま移動できるので再帰処理は不要です

ゴミ箱を空にするアクション

ここがゴミ箱フォルダを空にするアクションです
前述していますが、結局ここだけでもほぼ目的を達成できます

エラーメッセージアクション

ここまでのファイル操作でエラーが発生しているかどうかを判定して
発生していれば、15行目でエラー情報の取得を行います
その結果が「エラーではありません」になっていなければなんらかのエラーが発生していると判断が出来ます
その場合にのみメッセージを表示しています
処理の目的から完了のメッセージは不要と思います
欲しい場合はこの辺を修正してください

ゴミ箱は空っぽの状態でバックアップ体制取れるなんて、なんて素晴らしいの!
というお声にお応えしますが残念なことに、無償版では自動実行ができません
なのでAutomateDesktopを起動して、フローを手動実行する必要があります
はい、最後の最後に爆弾です
自動的に出来ひんのんか~いって声が聞こえてきそうです

PowerAutomateDesktopのフローのコピー方法について

Desktop無料版でのフローの共有方法について

PowerAutomateDesktopではフローの共有が有償版でないと行えません
そもそもデスクトップ環境というのは案外差があるので、あまりフローを汎用的に作成するというのは向いていないのですが、それでも汎用的なものやこのサイトで紹介するようなフローをコピペしたい場合があります

PowerAutomateDesktopは多少触ればわかると思いますが、アクションをコピーして複製することは普通に右クリックメニュー等から可能です

実はこのコピペしているのはアクションのそれではなく、内部コードをコピペしています、内部コードの結果が画面には分かりやすくフロー表示されているだけなんですね

Display.ShowMessageDialog.ShowMessage Title: $'''test''' Message: $'''テストメッセージ''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> TestValue
貼り付けしたアクション

上記のコードをコピーしてから、PowerAutomateDesktopのフロー範囲で貼り付けを行ってください
すると画像のアクションが作成されるはずです

このように実際のコピペにはコードが利用されているのが重要な点です
しかもこのコードは設定項目もしっかり反映されるので変数についても同じものがコピペすることが可能なので、自動作成ではない変数を利用していても問題ありません
UI要素などの利用しているものも同じくコピペされるので便利です

また今回は1アクションですが、まとめてコピペすることも可能です
この場合の文字数が凄まじいことになりますので本記事では割愛します

注意点としては、サブフローやそれをまたぐようにコピペは出来ない点です
サブフローを利用している場合は、コピペ先でも同名のサブフローを作成してフローごとにアクションをコピペする必要があります
とはいえ、ただのコピペなのでそれほどの作業量にはならないと思います

そして、このコードのコピペがチャット送信などで簡単に共有できますし
メモ帳に貼り付けてテキストファイルで送信してコピペしてもらうことも可能です

これは実は個人的な開発でも有用です
PowerAutomateDesktop自体結構重たいアプリなので、他のフローで作成した一部の汎用処理をコピペしたい場合にいちいち編集画面を起動しなくても
再利用したいフローをテキストファイルとして保管しておけば簡単に複製が可能です

Windows11で標準搭載となるPowerAutomateDesktopは今後さらに利用場面が増えるはずなので、無料版でのフローの共有方法は早い段階で習得しておきましょう

Excelのテーブルのデータ範囲を削除する

PowerAutomateDesktopでテーブル機能のデータ範囲のみを一括削除を行う方法

Excel.LaunchExcel.LaunchAndOpen Path: $'''対象ファイルの絶対パス''' Visible: True ReadOnly: False LoadAddInsAndMacros: False Instance=> ExcelInstance
Excel.GetFirstFreeColumnRow Instance: ExcelInstance FirstFreeColumn=> FirstFreeColumn FirstFreeRow=> FirstFreeRow
IF FirstFreeRow > 2 THEN
    Variables.DecreaseVariable Value: FirstFreeColumn DecrementValue: 1 DecreasedValue=> FirstFreeColumn
    Variables.DecreaseVariable Value: FirstFreeRow DecrementValue: 2 DecreasedValue=> FirstFreeRow
    Excel.DeleteCells.DeleteCells Instance: ExcelInstance StartColumn: 1 StartRow: 3 EndColumn: FirstFreeColumn EndRow: FirstFreeRow ShiftCellsDirection: Excel.ShiftCellsDirection.Up
END
Excel.CloseExcel.CloseAndSave Instance: ExcelInstance

対象ファイルの絶対パスを修正してください

PowerAutomateDesktopにはテーブル範囲を取得するアクションはありません
通常のセル範囲と同じように取得を行う必要があります
しかし、テーブル機能は通常のセル範囲と同様に扱えないことが多くあります
そのひとつが削除操作になります

テーブル機能の範囲をうまく取得せずに削除を行おうとするとエラーとなります
削除前に少し手間をかける必要があります

実際のフロー

画像のようにフローを組むとテーブル機能のデータ範囲を削除することが可能となります
実際の削除に必要となる手順としては2~7行目のアクションになります
1・8行目はExcelの起動と終了なので割愛します

まず2行目はアクティブシートの行と列の最初の空白の位置を取得します
ここで注意したいのがデータの無い行列を取得する点です

VBAのLastCellのような使用済みの最終セルの外側になります
さらにAutomateではテーブル機能の判別が出来ないので、テーブルの外側に入力値があった場合はテーブル範囲を超えてしまうため、削除アクションでエラーとなります
あくまでもテーブル機能の範囲のみのシートに対して有効ということになります
ただテーブル範囲より上の行や左の列であれば、削除範囲の始点を変更すれば対応可能です

3行目はIF分岐になります
データ範囲が存在しなければエラーとなってしまうので、見出し範囲と同じ行数であれば処理は行いません

4行目・5行目では取得した最終列・行数値を1減らしています
これは前述のとおり、ここで取得されるのはデータの最終セルではなくその1つ外側になっているので削除対象範囲がそれぞれ1を引いた数値となります
これをしていないとテーブル機能の場合はエラーになってしまうので重要になってきます
ただのセル範囲であれば気にしなくて大丈夫です

6行目で実際に削除を行います
開始の行列に関しては決め打ちで問題ありません
終点については取得・計算した列・行数値を使用します
このアクションを行うことでテーブルのデータ範囲を一括で削除出来ます

ちなみに、テーブル機能には集計行というデータ範囲外の行を作成することが出来ます
画像と同じアクションではその集計行まで削除を行ってしまいます
集計行を作成している場合は、5行目の行数値の減算数値を1から2に変更することでうまくデータ範囲だけを指定することが出来るようになります

まだまだ思い通りの動きをさせようと思うと回りくどいフローになってしまうことが多いですが、最悪VBAを作成してそれを実行しても良いです
処理速度は圧倒的に早いですしね
ただ、今回のような処理であればインスタンス表示を無くせば完全バックグラウンド処理に出来るのでその点を考慮すると処理時間はVBAほど考慮しなくても良いですね

PowerAutomateDesktopをExcelVBAと連携

PowerAutomateDesktopとExcelの連携の有効利用について

Excel.RunMacro Instance: ExcelInstance Macro: $'''プロシージャ名;引数1;引数2'''

VBAを実行するアクション

PowerAutomateDesktopはExcelを操作するアクションが複数あります
これらはそのアクション名を見ればおおよそ操作方法については分かるとは思います
Automate自体は処理速度がそれほど早いものでは無いので、VBAで実行できることであればそちらで行う方が圧倒的に早く処理できます

しかし、記事にあるようにAutomateと連携させることで今までVBAだけでは少し難しい処理が可能となります
・ユーザーフォームの操作を自動化
・IE以外のWebブラウザでの処理化

これらの処理はVBA単体で行うことを考えるとかなりハードルの高いものです
ですが、Automateと連携させることで驚くほど簡単に実装出来ます

VBA処理をAutomateから実行

まずAutomateからVBA処理の実行の方法を確認しておきます
操作方法は難しくありませんが、VBA処理の呼び出しで最も最初に注意しておく必要があるのが引数に引き渡せるのが「テキスト型」のみになっている点です
これは処理をすでに作成している場合に引数を設定している場合は要注意です
まあ、あまりオブジェクト等の引き渡しをトリガーになる処理に入れたりは無いとは思いますが…
VBA側で工夫すればテキスト型に限定されていたとしても、だいたい何とかなるとは思いますのでここは仕様と割り切って対応が必要な部分です

Excelのインスタンスを作成するアクション

まずは処理の作成されたExcelブックを開く必要があります
「Excelの起動」アクションから簡単に実行できます

アクションの設定画面

「Excelの起動」は次のドキュメントを開くに設定します
「ドキュメントパス」は絶対パスでファイルを指定します
「読み取り専用として開く」はオンにします
もちろん処理の内容を保存する必要がある場合はオフのままにしておく必要があります
ただ通常のExcelの開く処理と違い、すでに開かれているブックを開こうとした場合に注意のメッセージが表示されずに読み取り専用で起動されます
読み取り専用で開くことを前提としておくことで処理の安定化を図れます

残りの項目は初期設定のままで問題ありません、インスタンスの表示に関しては処理次第で変更しても良いです

プロシージャ名と引数を指定して処理を実行するアクション

処理の実行には「Excelマクロの実行」アクションを利用します

実行する処理

まずこちらが今回実行する処理です
引数に指定された文字列をメッセージ表示する処理です
分かりやすくするために引数を2つ指定しています

アクションの設定画面

アクションの設定画面の1つ目のインスタンスは先ほどExcelを開くアクションで生成された変数を指定します

「マクロ」の設定ですが、「プロシージャ名;引数1;引数2;…」のような形式で全て文字列のまま入力を行います
最初にプロシージャ名を入力しますが、プロシージャ名のみだけの指定となっていますのでモジュールは指定の必要がありません
と、いうより実際にはプロジェクト内全てを参照しているので別のモジュールに同名のプロシージャがあった場合は下記画像のエラーが発生するので注意してください

同名プロシージャが存在しているとエラーになる

とはいえ、別のモジュールでVBA上はさほど問題にならないとはいえ同じ名前のプロシージャが存在するというのはちょっと考えモノですね
動けばええやんという考えの自分ですがさすがにそれは是正した方が良いと思います

少し脱線しましたが、プロシージャ名の後に「;」(半角セミコロン)で引数を区切って入力します、複数ある場合も同形式でそのまま入力していきます

ちなみに、Automate側で数値型の変数を指定したとしてもVBAは文字列として受け取っているので問題が無いので、「”」で囲んだりする必要はありません

実行時の状態

実際に実行してみると、ブックが起動してプロシージャが実行されます
メッセージも渡した文字列がしっかり受け取っていることが分かります

ちなみに、このアクションはVBA処理が終了するまでアクションが停止する点は注意が必要です
もし、Automateで複数の処理を連続実行させたい場合はメッセージ表示などの処理は無くしておいた方が良いですね

ブックを閉じるアクション

蛇足ですが、開いたブックを閉じるには「Excelを閉じる」アクションを実行します
設定項目も生成されたExcelインスタンスの変数を指定するだけですね
ここは実際に操作してみると難しい場面ではないと思います

ユーザーフォームの操作を自動化

ユーザーフォームの操作の自動化ですが、この処理はVBAでは実装はめちゃくちゃに難しいと思います
そもそもVBAにはマウス操作すら行うことが出来ませんし、入力にしてもSendKeysメソッドでシビアなタイミング管理で実行する必要があります

そもそもこのユーザーフォームの操作を自動化する場面自体がほぼ無いかもしれません
ただ入力内容が転記レベルの単調なものであったり、フォームの作成を行ったのが自分では無くさらにその処理の全貌があまり定かではない場合が考えられます

とはいえ、基本的にユーザーフォームの操作自体も全てVBAで処理作成されているわけですから上記の様に処理の全貌が分かっていれば何とかなるかもしれませんが
やはりクリックイベントやチェンジイベントなどで連鎖的に処理が行われるのはユーザーフォームでは当たり前に行われる処理です
それらを全て単純にCallステートメントで呼び出すだけで動くとも限りません

と、前置きが長くなりましたが要はVBAではユーザーフォームの操作を行うのが困難ということです
ですが、Automateでは通常のウィンドウ同様にユーザーフォームの各コントロールを操作が可能です

コントロールの追加

まずはユーザーフォームの操作したいコントロールを登録します
Automateのウィンドウ左にある「UI要素」ボタンをクリックして、表示された画面から「UI要素の追加」ボタンをクリックします

追加の画面

追跡セッションという画面が表示されて、ユーザーフォーム上にマウスを移動させると認識するコントロールに赤枠が表示されます
この赤枠の表示された状態でCtrl+左クリックをすることで、追跡セッション画面に登録されます(画像の状態)
登録出来たら完了ボタンをクリックします

コントロールが追加された状態

これでコントロールの登録が出来ました
同じ要領で必要なコントロールを追加してください
この作業自体は後でアクションの追加時点でも可能なので、ここで追加しなくても都度追加しても大丈夫です

数が少ないうちは気になりませんが、UI要素の数が多くなると管理が大変になりますので各要素の右クリックメニューから名前の変更が可能なので多くなりそうなときは活用してください

登録内容

今回は3つのコントロールを登録しました
閉じるボタンについては作成出来るコントロールではありませんが、ウィンドウ操作が可能なためこれも自動化の対象に出来ます

今回の作成する操作
・テキストボックスに「test」と入力する
・クリアボタンをクリックしてテキストボックスの内容を消去
・フォームの閉じるボタンをクリックしてフォームを閉じる
この3つの操作をAutomateで自動操作してみます

使用するアクション

使用するアクションは2つで、テキスト入力とボタンのクリックアクションです

作成したフロー

いずれのアクションも設定自体は全く複雑なものはありません
直感的に設定可能なのでここでは割愛します

1ではテキストボックスに入力する処理を実行
2ではクリアボタンを押しています、これでテキストボックス内容が消去されます
3では閉じるボタンを押しています、これでフォームが閉じられます

実際の動きに関しては静止画では分かりづらかったので動画を作成しました
動きの気になる人は確認してみてください

フォームの自動操作

この処理において注意の必要なのが、Automateの仕様ではウィンドウのUI操作はマウスの操作も含まれるため他の作業を行いながらの処理実行は出来ません
そもそも自動化なのでしょうがないですけど

IE以外のWebブラウザでの処理化

IEの警鐘が鳴らされてから久しいですが、全くアプリの停止はありませんが
やはりIEの表示が行われないサイトであったり、IE未対応のWebシステムの出現もあり可能であればVBAでの情報収集等のWeb操作もIE以外のアプリを使えるようになると良いです

主なアプリと言えば、GoogleChromeかIEの後継であるMicrosoftEdgeなどが代表的なものと思います

しかしこれらの操作をVBAから行うには「Selenium」の導入が必要となります
ただIE操作のコードともプロパティやメソッドに違いがあったりするので
Web上からのコピペでようやくIE操作が出来たのにChromeに移行するのも大変です

そんな時にAutomateが出番となるかもしれません
もちろんVBAで操作するほどの処理速度を実現するのは不可能ですし、VBAで操作するほど細かい操作はまだAutomateは対応できません
ただこの対応に関しては、今後増加していくことは容易に想像できます

さらに、先般訳あってChromeの使用が出来なくなったのでEdgeに振り替えを行う必要があったのですがAutomateはインスタンス関係のアクションを振り替えるだけで終了しました
このメンテナンス上の優位性はすごいと感じた次第です

今回はChromeを操作して、この部品庫サイトの記事一覧のリストをExcelに取得してみたいと思います
なんせこの部品庫サイトは更新いつしたか分からんもんね

処理の流れとしては、Chromeの起動から情報の取得・Excelの起動をしてVBAに情報を引き渡してVBA処理で入力して保存終了・Chromeを終了の流れで処理化してみましょう
ちなみに、今回の記事では細かい作成要領は割愛します

まずは先にVBA処理を作成しましょう
引数にはテキスト型しか指定出来ないことは解説済みです
そして今回Automateから引き渡すテキストデータは記事一覧が改行されたテキストデータです
それを踏まえて以下のような処理を作成しました

作成した処理

今回の処理に関してはテスト処理なので画像で紹介しています
VBA処理の流れは最初に前回入力値の消去を行っています、全てA列に入力しているのでA列の入力データを消去しています
次に入力用のセルを変数に取得しています
この辺の入力処理は色々想定できるのでなんでも良いです、配列で一括入力もしようと思えば出来ますが、今回は変数セルを更新していって入力を行っていく形にしました
さすがに記事数が数万になったりすることは無いですからね、これからの人生全てを捧げても無理でしょうね、それは♪

次に引数のテキストデータを1行ごとに分割して入力するループ処理です
ここに関してはAutomateからどんなデータが引き渡されるかも事前に知っておく必要はありますが、引き渡すデータは改行されて改行コードはCrLfになっています
なのでそれをSpiritで分割して処理します

次はAutomateのフローを作成します

Web操作の開始アクション

前述しましたが、AutomateではいくつかのWebアプリを操作可能です
現状は画像の4つのアプリですね
今回はChromeを利用したいと思います

各アプリの操作前に拡張機能のインストールが必要になります

拡張機能の設定メニュー

メインメニューの「ツール」⇒「ブラウザー拡張機能」⇒任意のWebアプリを選択するとそのアプリで拡張機能のインストール画面に移行しますのでインストールを実行してください
以降はそのまま操作が可能となります

作成したフロー

今回の作成フローはこんな感じです
1はChromeを起動しています
画像のものはテスト用なのですでに起動済みのものを取得していますが処理化であれば新しく起動で良いでしょう

2行目の「Webページ上の要素の詳細を取得します」アクションで記事一覧のリストを取得しています

リスト範囲の取得

UI要素を指定してその範囲のデータを取得しますので、UI要素を追加します
画像の様にsectionタグになっている範囲がそうなのでその辺にマウスを移動させると取得可能です

取得されたデータ

Automate上での取得データは画像のようなものになっています
表示された文字列を単純なテキストデータとして取得していますね
行数値にあるように改行されたテキストデータです

3~5のアクションではこの記事前半で解説しているExcelのマクロ実行を行っています、今回の場合はデータの更新が必要になるので読み取り専用では開いていませんし、閉じるアクションでは保存するようにしています
ただ、見える必要のない処理なのでExcelのインスタンス表示はしていません

この処理ではWebアプリの操作は要素の取得のみで、Excelもインスタンスの表示が必要ない点から、処理はバックグラウンド実行が可能です
他の作業を行いながら処理を実行できるという事ですね

Automateの自動化も工夫次第でバックグラウンド処理にすることが可能なので、より有効活用が出来ると思います

処理の動きを確認出来る動画を作成しましたので動きの気になる人は確認してみてください

部品庫サイトの記事一覧のリストをExcelに取得

動画の方は動きの確認用にフローを少し編集しています
3行目のアクションをExcelの起動ではなくすでに起動済みのExcelを取得するアクションに変更してブックの閉じるアクションは無効化しています

動画の最初と最後でExcelのA列にデータが入力されていることを確認してください

そして最後にとても大切なことを1つ
この記事の例を試すことにより、部品庫サイトに高アクセスでサーバー攻撃しないでね

パスワードを取得する汎用フロー

パスワードをExcelに保存してそれを取得するフローの作成とそのフローの外部フロー化として汎用性をあげる方法について

Excel.LaunchExcel.LaunchAndOpen Path: $'''対象ファイルの絶対パス''' Visible: False ReadOnly: True LoadAddInsAndMacros: False Instance=> ExcelInstance
Excel.ReadFromExcel.ReadCell Instance: ExcelInstance StartColumn: 1 StartRow: 1 ReadAsText: True CellValue=> PasAc
Excel.ReadFromExcel.ReadCell Instance: ExcelInstance StartColumn: 1 StartRow: 2 ReadAsText: True CellValue=> PasP
Excel.CloseExcel.Close Instance: ExcelInstance

対象ファイルの絶対パスは修正してください

PowerAutomateDesktopでWebアプリやサービス等を自動化するフローは、だいたい最初に想定することかもしれません
そこで重要となってくるのがログインアカウントとパスワードの取得です
基本的にはテキスト入力のアクションのプロパティに設定しても良いのですが、パスワードが定期的に変更が必要だったり、強制的に数か月経過すると変更が必要となるものもあります

そんな時にいちいちAutomateのプロパティを編集するのも面倒です
しかも1つなら大して問題にはなりませんが、これが複数あった場合かつそれも複数のフローになっていた場合は非常に面倒です

そこで利用したいのがExcelです
Excelにアカウント名とパスワードを一覧として保存しておきます
そして必要なアカウント情報を取得しに行ってそれをAutomateに入力をしてもらいます

こうすることにより、Excelファイル1つで必要なアカウント情報を一元化できかつ編集も楽になります
またセルの位置さえ変動しなければ、フローへの影響もなく
関連するフロー全てに対して有効に出来ます

さらにこの記事中ではそのフローを別フローとして保存して実行することで、あらゆるフローから汎用的に利用できるようにしています

実際に作成してみる

パスワードファイルを開く

最初のアクション追加

最初のアクションはExcelファイルを開く操作になります
Excelファイルを直接開くには「Excelの起動」アクションから行えます
このアクションをダブルクリックします

Excelの起動アクションのプロパティ設定画面

プロパティ設定を上から順番に行います

まずは起動時の動作の「Excelの起動」ですが、ここは選択肢から「次のドキュメントを開く」を指定します
これで2つ目のドキュメントパスの指定が可能となりますので、パスワードファイルをダイアログから選択してください
これでフルパスの入力が行われます

基本的に目的に対してはこの2つの設定を行えば十分ですが、さらに以下の設定も行っておきます

「インスタンスを表示する」はオフにする
セルデータが欲しいだけなので表示する意味が無いからです
後述しますが場合によってはファイルのデータ閲覧を防ぎたい場合にも有効です

「読み取り専用として開く」はオンにする
これもインスタンスを表示しないのでどちらでも良いのですが、自動化処理の場合には編集しないならなるべくこの設定を行っている方が良いですね
自動処理というのはスケジュールやなんかでいつ発生するか分からないので、編集したいときに実行されてると迷惑です

詳細項目の「パスワード」はExcelの標準機能の読み取りパスワードの文字列です
これはこのファイルにあるデータはアカウント情報やパスワード情報という観点からファイル自体にパスワードを設定して、だれでも閲覧できるようにしたくない場合に設定して、フローで開く場合にはここでパスワードを指定することになります

前述にあるようにこの閲覧制限をしたいファイルを利用する場合はインスタンス表示(Excel表示)をしない方が良いですね

最後に保存ボタンをクリックしてアクションの作成完了です

セルの値を取得する

まずはファイルの中身を先に説明します

ファイルのデータ

このように特に見栄えは全く考慮する必要もなければ、A列にアカウント名、B列にパスワードとします
別のアカウント情報は改行して入力を行っていきます
ここは別にこれと同じでなくても、データがどこにあるか分かれば問題ないです
このデータをフローに取得してもらいます

そして取得アクションの前にもう1点設定を行っておきます
それは入出力用変数の設定です

前述しましたが、このフローは別のフローから外部呼出しを可能とすることを目的にしています
なので別のフローからどのアカウント情報が欲しいかを入力変数、取得した情報を出力変数として代入する必要があるためです

変数の設定画面

Automateの画面左側上部に変数のウィンドウがあります
もしこのウィンドウが表示されていない場合は、閉じる×ボタンのすぐ下の「{x}」というボタンをクリックすると表示されます
ちなみに{x}というのはAutomateでの変数の表現となります
他にも利用可能な場面で表示されています

そのウィンドウ上部の入出力変数の範囲から+ボタンをクリックしてさらに「入力」を選択します

入力変数の設定画面

変数の設定画面が表示されます
基本的に変更の必要も無いのですが、そのままで分かりにくい場合はそれぞれの項目を任意のものに設定を行います
ちなみに、データの種類は選んだら分かりますが数値型とかは無いのでテキストで問題ありません
そもそもAutomateではあまり変数の型は意識が必要ないです

また、選べる項目に機密テキストがありますが、これはこのフロー上でも確認が不可能になる暗号化されたものに利用します
これは別途アクションが必要になるのでまた別のお話とします

最後に作成ボタンをクリックして作成を完了させます

入力変数の作成時と同様の画面で今度は出力変数の作成を行います
これがフローで取得したアカウント名とパスワードを格納して返す変数です
ここではアカウント名とパスワードの2つの出力変数の作成を行ってください

まとめて取得してリストとして1つの変数で返すことは可能ですが
このフローの目的からするとまず間違いなく呼び出し元ではアクションがそれぞれ別のアクションで変数を利用します
連続したデータであるよりは、別々の変数の方が利用しやすいです

出力変数の作成

変数名と外部名を任意に指定して作成します
ちなみに、この変数名と外部名に関しては後でフロー呼び出しの解説で説明します

変数の作成完了した状態

画像の様に入出力変数が3つ作成された状態となれば、準備完了です

アクションの選択

実際のデータの取得アクションを作成します
アクションはExcelの起動の下にある「Excelワークシートから読み取り」を使用します
ダブルクリックすると設定画面が表示されます

アクションのプロパティ設定画面

Excelインスタンスと取得は初期上のままで問題ありません
もし違っていたら画像の様に設定してください

このアクションではアカウント名を取得したいので、先頭列は「1」を指定します

次の先頭行は先ほど作成した入力変数を指定します
変数を利用する場合は、入力ボックスの右側にある変数ボタンをクリックします
画像の様に変数の選択画面が表示されますので、そこから作成した入力変数を選択します

代入先の選択

次に詳細項目内の「セルの内容をテキストとして取得」を有効にします
しなくてもほぼ問題は無いとは思いますが、アカウント名とパスワードが数値であることは無いと思います

最後に生成された変数項目内で取得したデータの格納先を指定します
初期状態ではローカル変数になっているので、変数ボタンをクリックして出力変数を指定します

最後に保存ボタンをクリックして作成完了です

2つ目の取得アクション

同手順で2つ目のパスワードを取得するアクションを作成してください
設定は画像のような形で設定します
先頭列が「2」になっていることに注意してください

パスワードファイルを閉じる

取得が出来たらパスワードファイルは閉じます

閉じるアクションの選択画面

画像の「Excelを閉じる」を使用します
これをダブルクリックしてください

Excelを閉じるアクションのプロパティ設定画面

特に設定を変更する必要はありません
保存ボタンをクリックして作成してください

フローの全体

完成すると画像のような4ステップのフローが完成します
途中の読み取りアクションでは出力変数に代入しているので特に返し値を意識する必要はありません

完成したらフローを保存してください
このフローは入力変数である引数が必要になるので動作確認は別フローで行います

フローの動作確認

別のフローを新規に作成してください

別フローの実行アクションの選択画面

別のフローを実行するアクションはフローコントロール項目内の「Desktopフローを実行」を使用します
これをダブルクリックしてください

アクションのプロパティ設定画面

先ほど作成したフローをリストから選択します
ここでは「PasGet」を選択しています

設定完了状態

フローを選択すると自動的に同期されて、入力変数が作成されたフローであれば設定画面に自動的に表示されます
ここに任意のデータを入力します

また前述にて後ほど説明するといっていました、入出力変数の外部名ですが
ここに初期状態で表示された変数名がそれに一致する事になります
なので基本的にはどちらも同じものを利用している方が分かりやすいです

作成完了状態

アクションを作成すると画像の様に1ステップのアクションが作成され、フロー変数が自動的に作成されます

呼び出し元としてはこれだけで取得フローを実行して返し値を受け取る事ができます
これを実際に実行してみます

実行後の画面

こちらが実際に実行した後の画面です
フロー変数に指定した行のアカウント名とパスワード文字列が取得されていることが確認できます
入力変数には「2」を指定したので、Excel2行目の情報が取得されています

この様に外部フローとして汎用的に取得処理を作成することで、パスワードの変更等があった場合でもフローの修正が必要なくなります
行数を変更さえしなければですが…

サブフローよりもさらに強力に汎用性を上げることの出来る外部フローの呼び出しを有効に活用しましょう

PowerAutomate Desktopについて

PowerAutomateのDesktop版のインストールについて

ついに提供開始されました
最初に書いておきますが無償提供はあくまでも無償版という形での提供になっている点には注意が必要です

正直、Web版との連携が取れないのは致命的ですが、それでもローカルな作業であれば画期的な対応が出来るようになるはずです
何よりほんの半年で無償版の提供まで行っているくらいですから、この無償版をみんなが利用するようになれば更なる機能追加も期待大です

導入も簡単です、既にWeb版で解説している管理画面からダウンロードサイトへ移動可能です

メニュー画面

作成メニューを選択して、その中から「デスクトップフロー」を選択します

起動画面

起動画面が表示されます
ここから「アプリのダウンロード」を選択してください
インストールファイルがダウンロードされます
ダウンロードファイルから、PCにインストールしてください

アカウントログイン等の初期作業を行います
こちらの作業も複雑なものはなく数ヶ所設定すれば完了です

初期表示

新しいフローを作成するには画像のボタンをクリックして作成を始めます

フローの名前設定画面

フローの名前を設定する画面が最初に表示されます
ここで名前を付けなくても、後で編集可能なためとりあえず作成をしてみます

編集画面

開いてみて分かるのは、Web版とは全く違う作成画面であることです
こちらにもなれていく必要がありますが、やはりコードの記載は全く不要で日本語で記載された各項目も難解な解読を必要としません

最初に書いた通り、トリガーの設定はありません
処理アクションを追加していきます

細かいフローの作成手順などは別の記事で解説していきますが、ここでは無償で利用できる環境を整えれれば完了です
また、このサイトでは無償版の解説を行うこととし、有償版の解説については扱いませんのでご了承ください

PowerAutomateの困った現象

PowerAutomateで作業をしていて、非常に困った現象のあれこれ

PowerAutomateでフローを作成している際に、実際に遭遇して困った現象を解説しておきます(1つ1つは小さいことで、1つの記事にするほどの内容ではないようなこと)
同じく困ってしまうことがあると思いますので注意のため、なるべく早い段階で読んでおいてほしいです
また、現象に遭遇するたびに追記していこうと思います

変数の自己参照が出来ない

変数の利用が出来ますが、その変数は自己参照が出来ません

VBAでよくあるのが、「i = i + 1」というような加算を行うような変数の更新です
これは変数「i」に代入する際に「i」を参照しています
これが自己参照です

PowerAutomateではこれが使用できません
変数の設定アクションでは、別の変数を使用する必要があります

実際上記の加算に関しては、専用のアクションがありますが
やはりVBAになれているものからすると、この自己参照が出来ないのは結構不便に感じます

もっとも単純な解決法は、2つの変数を作成することです
VBA的に記載しますと、「i = i + 1」が利用できないので
「i = i_2 + 1」と記載して加算を行う
「i_2 = i」と記載して計算結果を2つ目にも共有する
このように2つの変数を介することで、疑似的に自己参照の動きを作成できます

考えるだけで面倒ですね、なんとか自己参照できるようになってほしいものです

エラー発生時の挙動

エラー発生時は非常に面倒です

特に保存を許してくれないのが、1番のストレスです
エラーをとりあえず解決するまで保存を実行しようとしてもフローチェッカーが保存を阻んできます
これが案外面倒で、終了アクションを代入してそこでフローが終わるようにしてテストを行いたくても保存が出来ないからテスト出来ない

とりあえず全てのエラー個所にダミー値を入力していく
これが数が多いと面倒だし、何より修正前のデータを残しておきたいこともある

さらに最悪なのが、それなりに作業を進めてから誤って変数などを削除してしまってエラーになった場合です
PowerAutomateには操作を戻す機能が無いため、元に戻せません
なので新たに変数やアクションを作り直して再度設定を全て行う必要があります

これが保存後最初の操作ならまだしも、前述したようにそれなりの作業後にこの状況に陥ると前回保存時からの作業が全て吹き飛ぶため絶望的です
これで何度「やってもた・・・」と言ったか記憶に無いです、保存できてないので・・・

もう1つ面倒なのが、アクションの名前を付けづらくなることです

エラーが発生した状態では一定時間ごとにチェックが行われているためか、アクションの名前の変更を行っている際に1秒程度で強制完了させられます
瞬時に編集して確定させれば編集は可能なのですが、考えながら入力するのが当然なので漢字変換してるあいだに強制確定されて、入力内容が無くなってしまう

エラーチェッカーさんは、保存を阻むのだけはやめてくれないでしょうかねぇ

アクションが削除出来ないことがある

たまにアクションが削除できなくなることがあります
アプリのネットワーク状況によるものなのかもしれませんが、アクションの詳細メニューから削除を選択しても、うんともすんとも言わず、削除が行われない事があります

この場合はブラウザを再更新すれば、また削除を行えるようになります

これがまた上記のエラー発生時に出た時は非常にやっかいです
なんせ保存できないので、再更新かけられんですから

アクション名の後変更の要注意

アクション名は見出しにもなっているので、わかりやすい文字列にする方がフローを読みやすくなります

ただこれで注意してほしいのが、アクションを作成して後続処理を作成した後に名前を変更する場合です

と、いうのもPowerAutomateの場合に関数の引数にアクションを指定した場合、そのアクション名が文字列として指定されています
ここが後で変更した場合に自動的に変わってくれないのです

そのため、アクション名を変更することで後続の関数が動作しなくなることがあります
動的なコンテンツの追加では構わんのですが、PowerAppsへの引数名にも同じ現象が発生するので、アクション名は後で変更することは基本避けた方が良いです

というか、そもそもアクション名は変更しなくても良いと思っています
正直ここに詳細な内容を書くことが出来ないので、ここにその目的は持たせず、コメントを入力することが出来るのでフローの動作の説明はそちらで記載するようにして、アクション名は初期のまま変更しなくていいんちゃう、と今は感じております

当然動的なコンテンツの追加から選択する場合はアクション名をしっかり付けている方が分かりやすいです
でもアクション名に意味を持たせると、どうしても後で仕様変更だったり修正だったりで微妙につけた名称と違ってくることがあり、その場合には変更するのが非常に面倒ですよね、そもそも動いていたフローを必要以上にいじる必要もあるし
かといって全然ちゃう意味の名前になってたら、なんでこんな名前なんや?と無駄な思考の時間が発生します

なら最初っからアクション名には意味を持たせない、これでええんです
もちろんコメントはどこにも影響与えないので、後で変更はいくらでも可能です

動的なコンテンツの追加が変なとこに入る

動的なコンテンツの追加を行った際に、入力カーソルのある位置に入らないことがあります
というか、連続代入の時はほぼ入りません

いちいち入力カーソルをマウスクリックで指定してから代入を行う必要があります

ついでに言うと、shiftキーを押しながら矢印キーを押していって、入力カーソルを移動させてコピペ範囲を取得しようとしても範囲が広がらないことが多々あります
この場合は、矢印キーを使用せず、shiftキーを押しながらマウスクリックで指定することが出来ます

@が自動的に増え続ける

これはもはや怪奇現象ですが、条件分岐の条件設定に「@」を入力して、別の個所を選択したりしなかったりと発現する理由はよくわかりませんが、どんどん増えていきます

1文字だけ増えたり一気に数文字増えたり、最初見た時はおののきましたね

@自体がPowerAutomateの内部処理では特別な意味を持つ文字であるため、なんらかの補完処理なのかが暴走しているようです

対処としてはこれを文字列として指定すればいいので「”@”」というように文字列指定をして下さい
ってか関数では文字列指定は「’」シングルなんですが条件分岐での入力時はダブルでしないとダメみたいです、もう何がなんやらですね
ちなみに関数のString関数を使用しても良いです、もちろんその場合は「’@’」という引数設定になります

PowerAutomateの詳細画面

フローの詳細設定画面の説明、共有についての説明も行います

PowerAutomateの詳細画面では、フローの名称含め設定関係を行うことが出来ます

フローの詳細画面を開く方法
詳細画面を表示する

詳細画面は初期の作成時には経由しませんので、表示されません
一度保存してから開く必要があります

まずはマイフローを選択して、保存されたフローを表示してください
基本的にはクラウドフローを表示します
ここに表示されたフローから、名称の部分をクリックすると詳細画面が表示されます

ちなみに、この画面から直接編集画面に行く場合は、右側に表示されているえんぴつマークをクリックすると遷移できます

詳細画面の画像
詳細画面の画像

こちらがフローの詳細画面となります

ここでは基本的によく利用するのが、編集画面への移行と共有になります

まず、上のメニューから解説します
「編集」はフローの編集画面に移動します
「共有」はこのフローを別のアカウントに共有することができます
「名前を付けて保存」はこのフローの複製を名前を付けて行うことができます
「削除」「実行」はそのままの意味の動作です
「コピーの送信」は別のアカウントにこのフロー自体を送付できます
「オフにする」は自動実行フローを一時停止する場合に使用します
これ以外はほとんど利用しませんので、割愛します

共有とコピーの送信について

上記のメニューの中でややこしいのが、「共有」と「コピーの送信」です

この2つの操作はどちらも別アカウントで作成したフローを利用できるように共有する機能ですが、共有は別アカウントに所有権を持たせる機能で、コピーの送信は別アカウントを所有者として別のフローを新規作成してもらう形になります

共有の場合は、共同所有者という権限の元に自己アカウントと別アカウントの両方から編集が可能になります
これは主に、フローの設定値などを環境に合わせて変更したり、定期的に変更が必要な場合に別アカウントの人にフローの編集を行ってもらうことが難しい場合に有効です

別アカウントの人から条件設定を聞いてから自分でフローの編集を行えば、その別アカウントの人は新規条件にてフローを実行することが出来ます

一方、コピーの送信は別のフローとして新規作成を行います
なので自己アカウントにあるものはそのアカウントに共有されませんので自分の作ったものをオリジナルとして保管しておくことが出来ます

また、別アカウントの方で新規作成を行うため、そのフローの所有者となることが出来ます
この所有者権限は、2021年2月6日時点で譲渡が出来ない仕様となっています
そのため、作成元のアカウントを削除したりするとフローが利用できなる可能性があります
共有ではあくまでも共同所有者という権限で、所有者権限とは別権限になります

この共有とコピーの送信の機能に関しては、どちらの方が良いというものではありませんので、状況に合わせて使い分ける様にしてください

名前を付けて保存について

名前を付けて保存とは、このフローを別の名称を指定して複製する機能です
フロー自体には複製・コピーといった機能は無く、ここから既存のフローを元に作成する場合に利用できます

また、フロー自体が運用中であれば編集したりテストを実行することも出来ません
テスト自体が保存を実行しないと行えない仕様のためです

なのでフローの編集前に一度別フローとして作成してテストフローとして実行してみて問題ないことを確認してから、運用中フローを更新する。というような場合にも利用できます

オフにするについて

オフにするは、フローの実行を行わないようにする設定です
オフにした場合はこの場所が「オンにする」に切り替わりますので、ここをクリックすることでオンオフの切り替えを行うことが出来ます

基本的には自動実行フローにおいて、メンテナンスを行う際や一時的に利用を停止したい場合に使用します

ただ、この設定をオンにする際に注意が必要なのが、自動実行フローの場合にトリガーが保存されていることがあります
オフにしている間に、実行されなかったフローがオンにした瞬間に一気に連続して走ることがあります
そのため、自動実行フローを戻す場合にフローが実行されてほしくない場合はフローのアクションで一番最初に終了アクションを代入しておき、オンにして自動実行されるかを確認して実行されるようならすべての実行が終了されるまで待ってから、終了アクションを削除して本稼働させる、というような操作が必要になります

また、この設定をオフにした状態ではテスト実行も行えません
テストを行おうとした時点でエラー表示されます

詳細設定について

情報の詳細編集画面
詳細設定画面

フローの名称や説明を編集する場合は、左上の範囲「詳細」の右上にある編集を選択してください

ここを選択すると編集画面が右側に表示されます
ここから編集を行います

ここではフローの名称と説明を記入することが出来ます
フローの名称自体はフローの編集画面でも編集可能です

説明は後で自分が見てわかるようにしっかり記載を行っておいてください