PADでExcelのデータを1行ずつ処理する方法

PowerAutomateDesktop

Excelのデータを1行ずつ処理する方法を紹介します。

Power Automate Desktop(PAD)でExcelを自動化していると、

  • Excelのデータを上から順番に処理したい
  • Excelの各行に対して同じ処理を繰り返したい
  • Excelの一覧を1行ずつ読み取りたい
  • ExcelのデータをWebサイトへ1件ずつ入力したい
  • 条件に一致する行だけ処理したい

といったことがあります。

このような処理を行う場合は、Excelのデータをデータテーブルとして取得し、「For each」アクションを使うと簡単に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行目

という順番で処理されます。

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を使用した基本的なフローは以下のようになります。

  1. Excelの起動
  2. Excelワークシートから読み取る
  3. For each
    • 行データを処理

For eachの中に入れた処理が、Excelの行数分だけ繰り返されます。

Excelのデータを1行ずつ処理するだけであれば、必ずしも最終行を自分で取得する必要はありません。

「Excelワークシートから読み取る」で対象のデータ範囲を取得し、その結果をFor eachで処理すれば、取得したデータの件数だけ繰り返し処理できます。

例えば、Excelに100行あれば100件、Excelに500行あれば500件、というように処理できます。

ただし、読み取る範囲を固定している場合は、データが増えたときに新しい行が処理されないことがあります。

そのため、実際の業務では「最終行を取得して、その行まで読み取る」という方法もよく使います。

1行ずつ処理する方法を覚えると、条件を指定して処理することもできます。

例えば、金額が2000円以上の商品だけ処理したいとします。

Excelが、

商品名個数金額
りんご101000
みかん202000
バナナ151500
ぶどう82400

だった場合、

金額 >= 2000

という条件を設定します。

For eachの中に「If」アクションを追加し、

%CurrentItem[2]% >= 2000

という条件にします。

すると、

りんご → 処理しない
みかん → 処理する
バナナ → 処理しない
ぶどう → 処理する

というように、条件に一致した行だけ処理できます。

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を使用するとデータテーブルが簡単に操作できるので、ぜひ使ってみてください。

タイトルとURLをコピーしました