Power Automate×Excel:複数テーブルをDo untilで動的に読み込んで一括処理する方法

Excelに同じ形式のテーブルが複数あり、それらをPower Automateで順番に読み込んで処理したいケースがあります。

例えば、以下のように「テーブル1」「テーブル2」…のように同じ列構成のテーブルが複数ある場合です。

  • テーブル1:作業日 / ユーザーID / UPN / 氏名 / 役職 / 作業
  • テーブル2:同上
  • テーブル3:同上

このとき、テーブルごとに「表内に存在する行を一覧表示」アクションを用意してしまうと、テーブルが増えるたびにフローが肥大化し、保守が大変になります。

そこで本記事では、テーブル名を配列で管理し、Do untilで“テーブル名を差し替えながら処理する”方法をご紹介します。

この記事で実現できること

  • Excel内の複数テーブル(テーブル1/テーブル2…)を 順番に動的指定して読み込める
  • テーブル数が増えても フロー構造を増やさずに対応できる
  • 同一ロジックでの一括処理(登録・変換・通知など)ができる

全体の考え方(仕組み)

今回のポイントは以下の3点です。

  • 処理したいテーブル名を varKeys(配列)で持つ
  • 何番目のテーブルを処理中かを varIndex(整数)で管理する
  • Do Untilで varIndex を増やしながら varKeys を順番に回す

つまり「配列でテーブル名リストを用意しておき、ループのたびに読み込むテーブル名を差し替える」方式です。

手順

ここから、配列とDo untilを用いて複数テーブルを順番に処理するための設定手順を説明します。処理対象のテーブル名を配列に用意し、インデックスでループ管理できるようにします。

1. 変数:varKeys(配列)を初期化

まず、処理対象のテーブル名を配列で用意します。「変数を初期化する」アクションで以下の様に設定します。

  • 名前:varKeys
  • 種類:アレイ
  • 値(例):
     [
     "テーブル1",
     "テーブル2",
     "テーブル3"
     ]

※ここでは説明用に「テーブル1」「テーブル2」表記にしていますが、運用では「2025_01」「2025_02」など規則的命名でもOKです。

2.変数:varIndex(整数)を初期化

次に、配列の何番目を処理中かを管理する varIndex を初期化します。

  • 「変数を初期化する」アクション
  • 名前:varIndex
  • 種類:整数
  • 値:0

3.Do until を追加して、配列件数分だけループさせる

ここでDo untilを使用し、配列の件数分だけ繰り返します。

  • Do until 条件式
    @greaterOrEquals(variables('varIndex'), length(variables('varKeys')))
    • 式の意味:
      varIndex が varKeys の件数以上になったら終了
      =すべてのテーブルの処理が終わったらループ終了

3.現在処理対象のテーブル名を取り出す(Compose)

Do untilの中に 作成(Compose) を置き、現在のテーブル名を取り出します。

  • 「作成(Compose)」アクション
  • アクション名を変更:CurrentTableName
  • 入力:variables('varKeys')[variables('varIndex')]

    • 動作イメージ:
      • 1周目:テーブル1
      • 2周目:テーブル2
      • 3周目:テーブル3

4.Excel「表内に存在する行を一覧表示」を動的に指定

次に、Excel Online (Business) の「表内に存在する行を一覧表示(List rows present in a table)」 を追加します。

  • 「表内に存在する行を一覧表示(List rows present in a table)」アクション
  • 場所:OneDrive または SharePoint(運用に合わせて)
  • ドキュメントライブラリ:任意
  • ファイル:対象Excel
  • テーブル:CurrentTableName(動的アイテム作成アクションの出力)

UIでテーブル欄がドロップダウン形式になっている場合、一度「カスタム値の入力」を選ぶと動的コンテンツに差し替えできます。

5.テストを実行

ここまでの実装の正常性確認と次項で必要となる情報を取得するため、一度テストを実行します。

実行結果を開き、アクションの出力の内容を丸々コピーします。

6.取得した出力内容を処理する

「表内に存在する行を一覧表示」から出力された情報を後のアクションで動的アイテムとして使用しやすくする処理を行います。

理由としてはテーブルが動的アイテムとなっているのでフローの編集画面ではテーブルに作成したカラムが読み込めないためです。

6-1.「JSONの解析」アクションの「コンテンツ」に「表内に存在する行を一覧表示」の動的アイテム「Value」を挿入し、「スキーマ」の下部にある「サンプルから生成」をクリックします。

6-2.「サンプルJSONペイロードの挿入」が表示されるので手順6でコピーした内容を貼り付け「完了」をクリックします。

6-3.「サンプルJSONペイロードの挿入」が閉じると、アクションの「スキーマ」に自動生成されます。

6-4.「JSONの解析」アクションの動的アイテムにはファイルのカラムが表示されるようになるのでそれらを使って、必要な処理を行います。

  • 例:
    • SharePoint リストに追加
    • Azure SQL Database に追加
    • 内容をTeamsでメッセージとして通知...等

7.変数「varIndex」 を +1 して次のテーブルへ進める(重要)

Do until の末尾にて必ず varIndex を更新します。これが無いと変数「varIndex」の値が増えず、永遠に「テーブル1」だけを処理し続けてしまい、無限ループとなります。

  • 「変数を設定」アクション
  • 名前:varIndex
  • 値:add(variables('varIndex'), 1)

注意点

  • 指定するのは「シート名」ではなく「テーブル名」
    • Excel上のテーブル名と完全一致が必要です。
    • Excelでテーブルを選択し、「テーブルデザイン」の左上に表示される名前がテーブル名です。
  • テーブル名はシンプルにしておくと安全
    • 記号(. - () など)入りのテーブル名は、UIやコネクタによって指定しづらいことがあります。
    • 本記事のように テーブル1/テーブル2 のようなシンプル命名が運用上もおすすめです。
  • ループ回数が多い場合はタイムアウトに注意
    • テーブル数×行数が多いと実行時間が長くなります。必要に応じてテーブ
    • 単位でデータ件数を絞るフィルタークエリやDo untilの上限・タイムアウトを検討します。

おわりに

Excel内に同一形式のテーブルが複数ある場合でも、配列+Do until を使うことで、フローを増やさずに順次処理できるようになります。

テーブルが増えても、varKeys に名前を追加するだけで対応できるため、保守性が高く、運用にも向いた実装です。

同じロジックで複数テーブルを処理したい場面では、ぜひ試してみてください。

執筆担当者プロフィール
志垣 実愛

志垣 実愛(日本ビジネスシステムズ株式会社)

クラウドソリューション事業本部に所属。Power Platformを活用した業務改善に取り組んでいます。

担当記事一覧