shikumika’s diary

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

【Power Automate】2次元配列のDataTableでFor eachの実施例

Power Automateで、2次元配列のDataTableをFor eachループによる処理サンプル。

For each アクションを使用してデータテーブルをループする場合、反復処理の対象となる変数はデータ行となります。そのため、個々の値を抽出する場合は、データ行を再度For each アクションを使用してループするなどが必要。なお、使用のツールは「Power Automate Desktop」です。

内容:

データ型の詳細

learn.microsoft.com

サンプルの前提

次の「Excelの表から値抽出(2次元配列のDataTableから取得)」の事例は、行列を指定して値取得するサンプルでした。ループ処理して取得する場合のサンプルで、行列の場所を示す情報も付記。

shikumika.org

具体的には、次のようにデータテーブルを縦方向に変換する。

データテーブルを縦方向のリストに変換

アウトプットイメージ

サンプル(DataTableでFor eachの実施)

DataTableでFor eachの実施

PowerAutomateのフローイメージ

フローのテキスト情報

上記のフローをコピーしたテキスト情報は次のとおりです。このテキストをフロー デザイナー(編集画面)に貼り付けることで実行できます。

Display.SelectFolder Description: $'''処理対象のフォルダを指定してください。''' IsTopMost: False SelectedFolder=> SelectedFolder ButtonPressed=> ButtonPressed
Folder.GetFiles Folder: SelectedFolder 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
Excel.LaunchExcel.LaunchUnderExistingProcess Visible: True Instance=> ExcelInstance
LOOP FOREACH CurrentItem IN Files
    Excel.GetFirstFreeColumnRow Instance: ExcelInstance FirstFreeColumn=> FirstFreeColumn FirstFreeRow=> FirstFreeRow
    Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: CurrentItem Visible: True ReadOnly: False Instance=> ExcelInstance2
    Excel.ReadFromExcel.ReadAllCells Instance: ExcelInstance2 ReadAsText: False FirstLineIsHeader: False RangeValue=> ExcelData
    SET 行 TO 1
    LOOP FOREACH ExcelDataGyo IN ExcelData
        SET 列 TO 1
        LOOP FOREACH CellValue IN ExcelDataGyo
            Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: CurrentItem.Name Column: 1 Row: FirstFreeRow
            Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: $'''R%行%C%列%''' Column: 2 Row: FirstFreeRow
            Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: CellValue Column: 3 Row: FirstFreeRow
            Variables.IncreaseVariable Value: FirstFreeRow IncrementValue: 1
            Variables.IncreaseVariable Value: 列 IncrementValue: 1
        END
        Variables.IncreaseVariable Value: 行 IncrementValue: 1
    END
    Excel.CloseExcel.Close Instance: ExcelInstance2
END

 

事例の補足説明

VBAやPowerQueryと比較して処理速度が遅い。処理の速さが最優先となる場面では不得手。PowerAutomateから他言語を呼び出すことも可だが、Excelだけで簡潔する業務の場合はVBAで処理した方がよさそう。

shikumika.org

 

以上、Power Automateで、2次元配列のDataTableをFor eachループによる処理サンプルでした。