Power Automateで、2次元配列のDataTableをFor eachループによる処理サンプル。
For each アクションを使用してデータテーブルをループする場合、反復処理の対象となる変数はデータ行となります。そのため、個々の値を抽出する場合は、データ行を再度For each アクションを使用してループするなどが必要。なお、使用のツールは「Power Automate Desktop」です。
内容:
データ型の詳細
サンプルの前提
次の「Excelの表から値抽出(2次元配列のDataTableから取得)」の事例は、行列を指定して値取得するサンプルでした。ループ処理して取得する場合のサンプルで、行列の場所を示す情報も付記。
具体的には、次のようにデータテーブルを縦方向に変換する。
サンプル(DataTableでFor eachの実施)
フローのテキスト情報
上記のフローをコピーしたテキスト情報は次のとおりです。このテキストをフロー デザイナー(編集画面)に貼り付けることで実行できます。
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で処理した方がよさそう。
以上、Power Automateで、2次元配列のDataTableをFor eachループによる処理サンプルでした。