今回はExcelブックから必要なデータをPADに読み込み、アクションのFor eachを使用して、Excelブックから読み込んだデータを、行数分1行ずつ繰り返す処理を行い、繰り返している行から必要なデータを別のExcelブックに列単位で転記します。
「For each」は「Loop」と違い、複数の値を持つテーブルなどを、行数分1行ずつ繰り返す処理を行うことが出来ます。
「For each」アクションのループ処理で1行ずつ、ExcelデータをFor eachの変数に格納します。
For eachの変数に格納されたExcelデータを「Excelワークシートに書き込み」アクションで指定したセルに転記します。
●アクションの流れ
1.特別なフォルダーを取得
2.Excelの起動
3.Excelワークシートから読み取り
4.Excelを閉じる
5.Excelの起動
6.Excelワークシートに書き込み
7.For each
8.Excelワークシートから最初の空の列や行を取得
9.Excelワークシートに書き込み
10.End
●表から転記したいデータを、新しいExcelブックに転記します。
今回は氏名と基本給を別のExcelブックに転記します。
フローの完成形
実行動画
1.特別なフォルダーを取得
1.アクションの「フォルダー」から「特別なフォルダーを取得」をワークスペースにドラッグ&ドロップします。
私の場合はデスクトップのフォルダーにファイルを保存しているので、「特別なフォルダーの名前:デスクトップ」にしました。
※特別なフォルダーを取得の詳しい説明は別の記事に掲載しております。該当記事はこちら
2.Excelの起動
Power Automate Desktopに読み取るExcelブックを選択します。
1.アクションの「Excel」から「Excelの起動」をワークスペースにドラッグ&ドロップします。
ドキュメントパスに、ファイルが保存されている場所を指定します。
3.Excelワークシートから読み取り
Excelブックのワークシートから、読み取りたいセル範囲を設定します。
1.アクションの「Excel」から「Excelワークシートから読み取り」をワークスペースにドラッグ&ドロップします。
取得:ワークシートに含まれる使用可能なすべての値
今回は単純な表形式で、タイトルや他に余計な数値も無いので、セル範囲ではなく、ワークシートに含まれる使用可能なすべての値を選択しました。
詳細:範囲の最初の行に列名が含まれています
列名を取得したいので、チェックを入れます。
すべてのワークシートを読み取りたい場合は、別の記事に掲載している「全てのワークシートからExcelDataを読み取る」を参照願います。
4.Excelを閉じる
1.アクションの「Excel」から「Excelを閉じる」をワークスペースにドラッグ&ドロップします。
ドキュメントを保存しないでExcelを閉じます。
5.Excelの起動
転記先の空のExcelブックを開きます。
1.アクションの「Excel」から「Excelの起動」をワークスペースにドラッグ&ドロップします。
空のドキュメントを使用します。
生成された変数「ExcelInstance2」
6.Excelワークシートに書き込み
空のExcelブックに列名を転記します。
1.アクションの「Excel」から「Excelワークシートに書き込み」をワークスペースにドラッグ&ドロップします。
・Excelインスタンス:先ほどExcelの起動で、生成された変数「ExcelInstance2」を使用します。
・書き込む値: %ExcelData.ColumnHeadersRow%と入力します。
※ExcelDataの変数に格納されている、列名のデータをセルに書き込みます。
・書き込みモード:セルを指定したいので「指定したセル上」を選択します。
1行目に見出しを書き込みたいので「列」に「A」、「行」に「1」を入力します。
7.For each
「For each」アクションのループ処理で1行ずつ、Excelデータを変数Currentltemに格納します。
1.アクションの「ループ」から「For each」をワークスペースにドラッグ&ドロップします。
・反復処理を行う値:Excelワークシートから読み取りで生成された変数 %ExcelData%を入力します。
※今回生成された変数:CurrentltemにExcelDataが1行ずつ格納され、ループします。
8.Excelワークシートから最初の空の列や行を取得
9.「Excelワークシートに書き込み」で空白行を取得するため、「Excelワークシートから最初の空の列や行を取得」のアクションを設置します。
1.アクションの「Excel」から「Excelワークシートから最初の空の列や行を取得」を「For each」の中にドラッグ&ドロップします。
Excelインスタンス:ExcelInstance2
生成された変数 FirseFreeRow(行)を次のアクションで使用します。
9.Excelワークシートに書き込み
今回は氏名と基本給を別のExcelブックに転記します。
列番号で書き込む方法と、列名を使用する方法をご紹介します。
●まずは、列番号を使用して書き込みます。
1.アクションの「Excel」から「Excelワークシートに書き込み」を「Excelワークシートから最初の空の列や行を取得」の下にドラッグ&ドロップします。
・Excelインスタンス:先ほどExcelの起動で、生成された変数「ExcelInstance2」を使用します。
・書き込む値: %Currentltem[3]%と入力します。
「氏名」を空のExcelブックに転記してみます。
列番号を使用して転記します。
For eachのCurrentltemにExcelDataが1行ずつ格納されているので、Currentltemから列番号の[3](氏名)を書き込む値に入力します。
※注意点としてPADの場合は、0から始まりますので、社員番号が0になり、氏名が3になります。
・書き込みモード:セルを指定したいので「指定したセル上」を選択します。
今回は列Dに書き込みたいので「列」に「D」、「行」に「%FirstFreeRow%」を入力します。
行に氏名を書き込む時に、入力された氏名が上書きされないように、空白のセルに書き込みを行います。
「Excelワークシートから最初の空の列や行を取得」した変数FirstFreeRowを入力し、空白行を取得します。
●次は列名を使用して、基本給を転記します。
1.アクションの「Excel」から「Excelワークシートに書き込み」を「Excelワークシートに書き込み」の下にドラッグ&ドロップします。
・書き込む値: %Currentltem[‘基本給’]%と入力します。
「基本給」を空のExcelブックに転記してみます。
列名を使用して転記します。
※注意点として[‘列名’]のように、文字の場合は点が1つの引用符'(シングルクォーテーション)で囲みます。
・書き込みモード:セルを指定したいので「指定したセル上」を選択します。
今回は列Dに書き込みたいので「列」に「E」、「行」に「%FirstFreeRow%」を入力します。
以上でExcelブックからデータを取得して、For eachで1行ずつループし、別のExcelブックに列単位で転記する方法をご紹介しました。