
Excelのデータを1行ずつ処理する方法を紹介します。
Power Automate Desktop(PAD)でExcelを自動化していると、
- Excelのデータを上から順番に処理したい
- Excelの各行に対して同じ処理を繰り返したい
- Excelの一覧を1行ずつ読み取りたい
- ExcelのデータをWebサイトへ1件ずつ入力したい
- 条件に一致する行だけ処理したい
といったことがあります。
このような処理を行う場合は、Excelのデータをデータテーブルとして取得し、「For each」アクションを使うと簡単に1行ずつ処理できます。
Excelのデータを1行ずつ処理する方法
今回は、次のようなExcelを用意します。

このデータをPADで読み込み、
1行目 → りんごを処理
2行目 → みかんを処理
3行目 → バナナを処理
4行目 → ぶどうを処理
というように、上から順番に処理してみます。
基本的な流れは以下のようになります。
- Excelを起動
- Excelのデータを読み取る
- For eachで1行ずつ取り出す
- 取り出した行のデータを処理する
1.Excelを起動する
PADで「Excelの起動」アクションを追加します。
既存のExcelファイルを使用する場合は、対象のExcelファイルを指定します。

Excelを起動すると、
%ExcelInstance%
のようなExcelインスタンスの変数が作成されます。
この変数を、後でExcelの読み取りに使用します。
2.Excelのデータを読み取る
次に、Excelのデータを読み取ります。
アクションから、「Excelワークシートから読み取る」を追加します。
今回は、Excelの表全体を読み取りたいので、データが入っている範囲を指定します。
例えば、
先頭列:1
先頭行:1
最終列:3
最終行:5

とします。
1行目には項目名が入力されているため、「範囲の最初の行に列名が含まれています」にチェックを入れます。
これで、「A1:C5」セルの範囲を読み取ることができます。
読み取ったデータは、データテーブルとして変数に保存されます。
デフォルトでは、
%ExcelData%
という変数になります。
この変数には、Excelから読み取った複数行のデータが入っています。
3.「For each」を使って1行ずつ処理する
ここからが今回のポイントです。
Excelから読み取ったデータを1行ずつ処理するには、「For each」アクションを使用します。
「For each」を追加すると、繰り返し処理する対象を指定できます。
今回は、
反復処理を行う値:%ExcelData%

とします。
つまり、ExcelDataが
- 1行目
- 2行目
- 3行目
- 4行目
という順番で処理されます。
CurrentItemについて
For eachでは、現在処理している1件のデータを変数で取得できます。
デフォルトでは、
%CurrentItem%
という名前の変数を使用します。
このCurrentItemには、現在処理している行のデータが入ります。
例えば1回目の処理では、
りんご,10,1000
2回目では、
みかん,20,2000
というように、処理する行が変わっていきます。
つまり、
1回目 → 1行目
2回目 → 2行目
3回目 → 3行目
4回目 → 4行目
という形で処理されます。
4.1行の中から特定の列を取得する
実際の自動化では、「現在の行」の中から特定の列の値を取得して使用することが多くあります。
例えば、
商品名,個数,金額
の3列があるとします。
現在の行が、
りんご,10,1000
だった場合、
- 商品名 → りんご
- 個数 → 10
- 金額 → 1000
となります。
PADでは、現在の行から列を指定して値を取得できます。
例えば、商品名を取得したい場合は、
%CurrentItem[0]%
のように指定します。
個数は、
%CurrentItem[1]%
金額は、
%CurrentItem[2]%
となります。
列番号は0から始まる点に注意してください。
つまり、
0 → 1列目
1 → 2列目
2 → 3列目
となります。
列の指定について
列は「項目名」でも指定が可能です。
列の指定に「番号」を使用する場合、どのデータを操作しているのかは見ただけでは分かりません。
%CurrentItem['商品名']%
というように、列の指定に項目名を使用することで、どのようなデータか一目で分かるようになります。
項目名を直接設定する場合は、
%CurrentItem['項目名']%
のように、「’」で項目名を囲んで入力します。
項目名を変数で設定する場合は、
%CurrentItem[変数名]%
のように、変数名だけを入力します。
5.1行ずつ表示する
まずは、正常に1行ずつ処理できているか確認してみましょう。
For eachの中に、「メッセージを表示」アクションを追加します。
メッセージには、
商品名:%CurrentItem[0]%
個数:%CurrentItem[1]%
金額:%CurrentItem[2]%

と入力します。
フローを実行すると、Excelのデータが1行ずつ表示されます。
最初は、

商品名:りんご
個数:10
金額:1000
と表示されます。
次に、

商品名:みかん
個数:20
金額:2000
と表示されます。
その後も、
商品名:バナナ
個数:15
金額:1500
商品名:ぶどう
個数:8
金額:2400
というように、順番に処理されます。
実際のフローを作成するときの流れ
For eachを使用した基本的なフローは以下のようになります。
- Excelの起動
- Excelワークシートから読み取る
- For each
- 行データを処理
For eachの中に入れた処理が、Excelの行数分だけ繰り返されます。
最終行を取得する必要はあるか
Excelのデータを1行ずつ処理するだけであれば、必ずしも最終行を自分で取得する必要はありません。
「Excelワークシートから読み取る」で対象のデータ範囲を取得し、その結果をFor eachで処理すれば、取得したデータの件数だけ繰り返し処理できます。
例えば、Excelに100行あれば100件、Excelに500行あれば500件、というように処理できます。
ただし、読み取る範囲を固定している場合は、データが増えたときに新しい行が処理されないことがあります。
そのため、実際の業務では「最終行を取得して、その行まで読み取る」という方法もよく使います。
特定の条件に一致する行だけ処理する
1行ずつ処理する方法を覚えると、条件を指定して処理することもできます。
例えば、金額が2000円以上の商品だけ処理したいとします。
Excelが、
| 商品名 | 個数 | 金額 |
|---|---|---|
| りんご | 10 | 1000 |
| みかん | 20 | 2000 |
| バナナ | 15 | 1500 |
| ぶどう | 8 | 2400 |
だった場合、
金額 >= 2000
という条件を設定します。
For eachの中に「If」アクションを追加し、
%CurrentItem[2]% >= 2000

という条件にします。
すると、
りんご → 処理しない
みかん → 処理する
バナナ → 処理しない
ぶどう → 処理する
というように、条件に一致した行だけ処理できます。

Excelのデータを別の場所へ入力する
1行ずつ処理する方法は、Excelの読み取りだけでなく、別のExcelへデータを入力する場合にも利用できます。
例えば、元のExcelから、
商品名,個数,金額
を1行ずつ取得し、別のExcelへ入力します。
イメージとしては、
- 元Excel
- 1行取得
- 商品名・個数・金額を取得
- 別Excelへ入力
- 次の行
- 商品名・個数・金額を取得
- 別Excelへ入力
という流れです。
これをFor eachで繰り返すことで、大量のExcelデータを自動で転記できます。
他のアプリケーションへの入力に使用する
Excelの1行ずつ処理する方法は、社内システムなど、他のアプリケーションとも組み合わせられます。
例えばExcelに、
氏名,住所,電話番号
が一覧で入っているとします。
PADで1行ずつデータを取得して、
- Excel
- 氏名を取得、住所を取得、電話番号を取得
- システムを開く
- フォームへ入力
- 登録
- 次の行へ
という処理を作ることができます。
このような処理は、Excelに大量のデータがある場合に特に便利です。
注意点・ポイント
空白行に注意する
Excelの途中に空白行がある場合、その行も読み取り対象になることがあります。
その場合は、For eachの中で、
商品名が空白なら処理しない
といった条件を設定する方法があります。
例えば、
%CurrentItem[0]% が 空ではない
という条件を使用すれば、商品名が空白ではない行だけ処理できます。
列番号は0から始まる
PADでデータテーブルの列を指定するときは、最初の列を0として扱います。
1列目 → [0]
2列目 → [1]
3列目 → [2]
となります。
ここを間違えると、違う列のデータを取得してしまうため注意してください。

For eachを使用するとデータテーブルが簡単に操作できるので、ぜひ使ってみてください。


