今回は複数のExcelブックから必要なデータを取り出し、新規のExcelブックに転記する方法をご紹介します。
手作業で複数のExcelブックを開いてコピーして、別のExcelブックに貼り付けるのは大変ですよね。
Power Automate Desktopなら自動化することができます。
例として複数の請求書の品名・数量・単価・金額のデータを新規のExcelブックに転記します。
○9月の請求書(Excelブック1つにワークシート2つ)
○10月の請求書(Excelブック1つにワークシート2つ)
○請求書からデータを取り出し、新規のExcelブックに転記
完成フロー
- 1.カスタムフォームを表示
- 2.新しいリストの作成
- 3.If
- 4.項目をリストに追加
- 5.変数の設定
- 6.ループ条件
- 7.If
- 8.カスタムフォームを表示
- 9.項目をリストに追加
- 10.変数の設定
- 11~12.Elseとループを抜ける
- 13~14.End
- 15.Excelの起動
- 16.変数の設定
- 17.Loop
- 18.Excelの起動(転記元のExcelブック)
- 19.すべてのExcelワークシートの取得
- 20.Loop
- 21.アクティブなExcelワークシートの設定
- 22.Excelワークシートから読み取る
- 23.For each
- 24.Excelワークシートに書き込む
- 25.変数を大きくする
- 26~27.End
- 28.Excelを閉じる(フロー番号28)
- 29~30.End
1.カスタムフォームを表示
「カスタムフォームを表示」アクションを使用して、ファイルを選択できるフォームを作成します。
1.アクションの「メッセージボックス」から「カスタムフォームを表示」をワークスペースにドラッグします。
2.パラメータ選択の「カスタムフォームデザイナー」をクリックします。
3.フォーム要素の「入力」「要素」「アクション」から必要な要素をフォーム構造にドラッグ&ドロップします。
今回使用するフォームの要素は
・テキストブロック(フォームのタイトルに使用)
・ファイル入力(最初と2番目のファイルを選択)
・切り替え入力(さらに別のファイルを選択する)
・送信(ファイル選択後の処理)
テキストブロック
フォーム内容をタイトルでお知らせします。
ID:Title
テキスト:PADに読み取るファイルを選択してください。
太さ:ボルダー
ファイル入力
ファイルを選択できるように「ファイル入力」を設置します。
ID:FirstFile
ラベル:最初のファイルを選択します。
検証:必須
エラーメッセージ:ファイルが選択されていません。
ファイルを選択しないで、「OK」ボタンを押した場合にエラーメッセージが表示できるように設定します。
切り替え入力
変数に値のTrueが含まれている場合、別のファイルを選択するように設定します。
ID:AnotherFile
タイトル:さらに別のファイルを選択しますか?
有効時の値:True
無効時の値:False
送信
フォームの最後に「送信」ボタンを押して処理を実行します。
ID:Submit
タイトル:Ok
2.新しいリストの作成
「新しいリストの作成」で作成した変数に「カスタムフォームを表示」で選択したファイルを取り込みます。
1.アクションの「変数」から「新しいリストの作成」をワークスペースにドラッグします。
変数を「File」に変更します。
※自分で解りやすい変数名に変更します。
3.If
次に、上記の「カスタムフォームを表示」で作成したフォームをキャンセルした場合に、それ以降の処理を行わないようにIFで処理します。
1.アクションの「条件」から「If」をドラッグします。
・最初のオペランド:カスタムフォームを表示で生成された変数 %ButtonPressed% を入力します。
{☓}から選択することが出来ます。
・演算子:と等しくない(<>) を選択します。
・2番目のオペランド:Cancel と入力します。
IFの条件分岐で、キャンセルではない(等しくない)場合に処理が実行されます。
キャンセルした場合は、処理が中断されます。
4.項目をリストに追加
カスタムフォームを表示した後、選択したファイルを「新しいリストの作成」で作成したリストに保存します。
1.アクションの「変数」から「項目をリストに追加」をドラッグします。
「カスタムフォームを表示」で生成された変数%CustomFormData[‘FirstFile’]%に入っているファイルを「新しいリストの作成」で作成した%File%に格納します。
5.変数の設定
「カスタムフォームを表示」で生成された変数%CustomFormData[‘AnotherFile’]%を変数の設定でAnotherFileに値(TrueかFalse)を設定して、AnotherFile変数に値Trueが含まれている限り、ループを繰り返すように設定します。
1.アクションの「変数」から「変数の設定」をドラッグします。
「カスタムフォームを表示」で生成された変数%CustomFormData[‘AnotherFile’]%を変数の設定でAnotherFileに値を設定します。
後でIFのアクションを使用して、Trueで処理を実行して別のファイルを選択できるようにします。
6.ループ条件
AnotherFile変数に値のTrueが含まれている限り、ループを繰り返すようにします。
1.アクションの「ループ」から「ループ条件」をドラッグします。
・最初のオペランド:True
・演算子:と等しい(=) を選択します。
・2番目のオペランド:True
7.If
最初のファイルだけ選択して、2つ目のファイルを選択しなかった場合に、「別のファイルを選択する」のループから抜けるか、さらに別のファイルを選択した場合の処理の設定を行います。
AnotherFileにTrueが格納されている場合にファイルの選択を求める処理を行います。
1.アクションの「条件」から「If」をドラッグします。
・最初のオペランド:変数の設定で設定した変数 %AnotherFile% を入力します。
{☓}から選択することが出来ます。
・演算子:と等しい(=) を選択します。
・2番目のオペランド:Trueと入力します。
8.カスタムフォームを表示
別のファイルを選択できるようにします。
1.アクションの「メッセージボックス」から「カスタムフォームを表示」をワークスペースにドラッグします。
2.パラメータ選択の「カスタムフォームデザイナー」をクリックします。
・ID:AdditionalFile
・ラベル:別のファイルを選択してください。
・検証:必須
・ID:AnotherFile
・ラベル:別のファイルを選択しますか?
・タイトル:はい
・有効時の値:True
・無効時の値:False
・ID:Submit
・タイトル:Ok
※別のファイルを選択しなかった場合:Falseになります。
9.項目をリストに追加
カスタムフォームを表示した後、選択したファイルをリストに保存します。
1.アクションの「変数」から「項目をリストに追加」をドラッグします。
「カスタムフォームを表示」で生成された変数%CustomFormData2[‘AdditionalFile’]%に入っているファイルを「新しいリストの作成」で作成した%File%に格納します。
10.変数の設定
2回目の「カスタムフォームを表示」で生成された変数%CustomFormData2[‘AnotherFile’]%を変数の設定でAnotherFileに値(TrueかFalse)を設定して、AnotherFile変数に値Trueが含まれている限り、ループを繰り返すように設定します。
1.アクションの「変数」から「変数の設定」をドラッグします。
「カスタムフォームを表示」で生成された変数%CustomFormData2[‘AnotherFile’]%を変数の設定でAnotherFileに値を設定します。
11~12.Elseとループを抜ける
ファイルを選択しなかった場合に、「別のファイルを選択する」のループから抜けます。
1.アクションの「条件」から「Else」をドラッグします。
2.アクションの「ループ」から「ループを抜ける」をドラッグします。
13~14.End
ループ条件とIfのEndの配置を確認します。
15.Excelの起動
アクション「Excelの起動」で請求書に記載されている内容を新規のExcelブックに転記するために、Excelの起動を設置します。
1.アクションの「Excel」から「Excelの起動」をワークスペースにドラッグ&ドロップします。
・Excelの起動:空のドキュメントを使用
・生成された変数をExcelに変更します。
(自分で判りやすい変数名に変更できます。)
16.変数の設定
上記のExcelの起動で転記する際に、次の行に自動で移動できるように変数を設定します。
1.アクションの「変数」から「変数の設定」をワークスペースにドラッグ&ドロップします。
・変数の値:1
17.Loop
Excelブックの数だけ「ループ」するように設定します。
1.アクションの「ループ」から「Loop」をワークスペースにドラッグ&ドロップします。
・開始値:0
・終了:%File.Count-1%
・増分:1
18.Excelの起動(転記元のExcelブック)
カスタムフォームで選択したExcelブック(請求書)が、新しいリストで作成した変数「File」に格納されているので、Excelの起動で開きます。
1.アクションの「Excel」から「Excelの起動」をワークスペースにドラッグ&ドロップします。
・ドキュメントパス:%File[LoopIndex]%
LoopIndexを使用してExcelブックの数だけループ処理します。
19.すべてのExcelワークシートの取得
LoopアクションでExcelブック(請求書)のワークシートの数だけループ処理するため、「すべてのExcelワークシートの取得」から生成されたSheetNames.Countを取得します。
SheetNames.Countにはワークシートの数が格納されているので、その数を利用してループ回数を自動で決定します。
1.アクションの「Excel」の「詳細」から「すべてのExcelワークシートの取得」をワークスペースにドラッグ&ドロップします。
・Excelインスタンス:%ExcelInstance%
20.Loop
LoopアクションでExcelブック(請求書)のワークシートの数だけ、ループ処理します。
今回は各請求書に2つのワークシートが作成されています。
1.アクションの「ループ」から「Loop」をワークスペースにドラッグ&ドロップします。
・開始値:1
「次と共にワークシートをアクティブ化」をインデックスに設定する場合、インデックス番号は1から始まりますので、開始値に1を入力します。
・終了:%SheetNames.Count%
SheetNames.Countのカウント数だけ、ループさせます。
%SheetNames.Count%の選択方法
①パラメータ選択の終了:右側の{☓}をクリックします。
②SheetNamesの▷をクリックします。
③.Countをクリックして選択した状態にします。
④選択をクリックします。
・増分:1
ループの数を1ずつ増やしていきます。
フロー番号21で使用する「アクティブなExcelワークシートの設定」のワークシートインデックスに今回生成された変数LoopIndexを使用します。
21.アクティブなExcelワークシートの設定
Excelブックから読み取りたい、ワークシートを設定します。
今回は全てのワークシートからExcelDataを取得します。
1.アクションの「Excel」から「アクティブなExcelワークシートの設定」をワークスペースにドラッグ&ドロップします。
・Excelインスタンス:%ExcelInstance%
・次と共にワークシートをアクティブ化:インデックス
ワークシートを左から順番にインデックス番号で開いていきます。
・ワークシートインデックス:%LoopIndex%
すべてのワークシートを開くために、ワークシートインデックスにLoopで生成された変数LoopIndexを使用し、ループの回数でインデックスの番号を取得します。
22.Excelワークシートから読み取る
Excelブックのワークシートから、読み取りたいセル範囲を設定します。
1.アクションの「Excel」から「Excelワークシートから読み取る」をワークスペースにドラッグ&ドロップします。
今回はセル範囲「B12からE25」のセル内容を取得します。
・Excelインスタンス:%ExcelInstance%
・取得:セル範囲の値
・先頭列:B
・先頭行:12
・最終列:E
・最終行:25
23.For each
「For each」アクションのループ処理で1行ずつ、請求書のExcelデータを変数Currentltemに格納します。
1.アクションの「ループ」から「For each」をドラッグ&ドロップします。
・反復処理を行う値:Excelワークシートから読み取りで生成された変数 %ExcelData%を入力します。
※今回生成された変数:CurrentltemにExcelDataが1行ずつ格納され、行数分ループします。
24.Excelワークシートに書き込む
請求書に記載されている内容を、新規のExcelブックに転記していきます。
1.アクションの「Excel」から「Excelワークシートに書き込む」をワークスペースにドラッグ&ドロップします。
・Excelインスタンス:%Excel%
フロー番号15「Excelの起動」で設定した変数Excelを入力します。
・書き込む値:%CurrentItem%
行単位で転記するために、フロー番号23のFor eachの変数を使用します。
・書き込みモード:指定したセル上
・列:A
・行:%NewVar%
フロー番号16の「変数の設定」で設定した変数を使用します。
25.変数を大きくする
上記のExcelワークシートに書き込む(フロー番号24)で設定した行:%NewVar%に「変数を大きくする」でLoopする都度NewVarに+1していき、行番号を増やしていきます。
行番号を増やすことで、次の「行」に自動で移動するように設定します。
1.アクションの「変数」から「変数を大きくする」をワークスペースにドラッグ&ドロップします。
・変数名:%NewVar%
・大きくする数値:1
26~27.End
Endを適切な位置に配置します。
28.Excelを閉じる(フロー番号28)
カスタムフォームから選択したExcelブック(納品一覧表)を閉じます。
1.アクションの「Excel」から「Excelを閉じる」をワークスペースにドラッグ&ドロップします。
・Excelインスタンス:%ExcelInstance%
・Excelを閉じる前:ドキュメントを保存しない
29~30.End
Endを適切な位置に配置します。
以上で複数のExcelブックからデータを取り出す方法をご紹介しました。
関連記事として複数のExcelブックの取り扱い方法をご紹介します。