Power Automate Desktopの実行は、編集画面とフロー一覧で処理速度が違う。ループ処理など処理回数が多い場合、編集画面から実行すると、実行遅延等の時間含めて処理時間が長くなる。編集画面での実行で処理速度が遅いと感じたら、フローの一覧表示から実行するだけで、かなり改善する。
参考になった情報:
確認した内容:
次のように、データテーブルからFor eachを使った繰り返し処理の場合、編集画面から実行すると、処理時間が長かった。一例として、この場合で編集画面から実行すると、一つのファイルにつき30秒ほどかかる処理が、フロー一覧から実行すると3秒ほどに短縮されて歴然だった。
VBAでの処理と比較
なお、上述の「2次元配列のDataTableでFor eachの実施例」と同様の処理ができるVBAは次のとおり。このコードを実行すると、一つのファイルが1秒程度の処理時間で、このケースではVBAが早かった。ただし、目的によっては、この程度の差は誤差になり、Power Automateで実行も良い。
Option Explicit Dim fs As Object 'FileSystemObjectのオブジェクト変数を宣言' Dim 処理対象フォルダ As String Dim 対象File As Object Dim 出力ファイル As Workbook Dim 対象ブック As Workbook Dim i As Long Dim 出力行 As Long Sub 複数ブックのセルの値を抽出() '処理対象フォルダの設定' With Application.FileDialog(msoFileDialogFolderPicker) .Title = "処理対象のフォルダを指定してください。" If .Show <> -1 Then Exit Sub 処理対象フォルダ = .SelectedItems(1) End With 'FileSystemObjectの利用準備' Set fs = CreateObject("Scripting.FileSystemObject") Set 出力ファイル = Workbooks.Add '画面更新停止' 'Application.ScreenUpdating = False 'フォルダ内のExcelファイルのループ' For Each 対象File In fs.GetFolder(処理対象フォルダ).Files 'Excelファイルだけ処理する' If InStr(対象File.Name, ".xls") > 0 Then i = i + 1 Application.StatusBar = i & " 番目のファイル処理中" 出力行 = 出力ファイル.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1 Workbooks.Open FileName:=対象File.Path, ReadOnly:=True Set 対象ブック = ActiveWorkbook Call 各ブックの値抽出 対象ブック.Close SaveChanges:=False End If Next 対象File '終了処理 Application.StatusBar = False Application.ScreenUpdating = True MsgBox "処理が完了しました。「変換結果」シートで処理結果を確認してください。" End Sub Private Sub 各ブックの値抽出() Dim 使用セル範囲 As Range Dim 出力セル As Range Set 使用セル範囲 = Range(ActiveSheet.Cells(1, 1), ActiveCell.SpecialCells(xlLastCell)) For Each 出力セル In 使用セル範囲 出力ファイル.ActiveSheet.Cells(出力行, 1) = 対象File.Name 出力ファイル.ActiveSheet.Cells(出力行, 2) = "R" & 出力セル.Row & "C" & 出力セル.Column 出力ファイル.ActiveSheet.Cells(出力行, 3) = 出力セル.Value 出力行 = 出力行 + 1 Next End Sub
VBAの補足
- VBAのコードは、PowerAutomateの処理にあわせる目的で作成したコードだが、多少は処理内容が異なる。
- VBAで画面更新停止をしている。試した処理事例では、Trueで画面更新を有効にしても、処理速度はVBAの方が速かった。
以上、Power Automate Desktopで、編集画面での実行は処理速度が遅く、フロー一覧から実行が早かったという備忘録でした。