shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Power Automate】処理速度は編集画面での実行が遅く、フロー一覧での実行が早い

Power Automate Desktopの実行は、編集画面とフロー一覧で処理速度が違う。ループ処理など処理回数が多い場合、編集画面から実行すると、実行遅延等の時間含めて処理時間が長くなる。編集画面での実行で処理速度が遅いと感じたら、フローの一覧表示から実行するだけで、かなり改善する。

内容:

参考になった情報:

kokoroe.konomi.app

 

確認した内容:

次のように、データテーブルからFor eachを使った繰り返し処理の場合、編集画面から実行すると、処理時間が長かった。一例として、この場合で編集画面から実行すると、一つのファイルにつき30秒ほどかかる処理が、フロー一覧から実行すると3秒ほどに短縮されて歴然だった。

shikumika.org

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で、編集画面での実行は処理速度が遅く、フロー一覧から実行が早かったという備忘録でした。