前回ご紹介した、「Excelデータの列単位をループ転記」に、別のアクションを追加して、条件に合致した1行を別のExcelブックに転記する方法をご紹介します。
今回はExcelブックの給料一覧をPADに取り込み、「入力ダイアログ」に社員番号を入力し、該当した社員番号の1行を別のExcelブックに転記します。
●今回のアクションの流れ
1.特別なフォルダーを取得
2.Excelの起動
3.Excelワークシートから読み取り
4.Excelを閉じる
5.Excelの起動
6.Excelワークシートに書き込み
7.ループ条件
8.入力ダイアログを表示
9.If
10.For each
11.If
12.Excelワークシートから最初の空の列や行を取得
13.Excelワークシートに書き込み
14~17.End
※赤文字が今回追加するアクション
●転記する行を指定し、新しいExcelブックに転記します。
入力ダイアログに社員番号1,3,7と入力すると、別のExcelブックに行単位で転記されます。
フローの完成形
実行動画
1.特別なフォルダーを取得
1.アクションの「フォルダー」から「特別なフォルダーを取得」をワークスペースにドラッグ&ドロップします。
私の場合はデスクトップのフォルダーにファイルを保存しているので、「特別なフォルダーの名前:デスクトップ」にしました。
※特別なフォルダーを取得の詳しい説明は別の記事に掲載しております。該当記事はこちら
2.Excelの起動
Power Automate Desktopに読み取るExcelブックを選択します。
1.アクションの「Excel」から「Excelの起動」を「特別なフォルダーを取得」の下にドラッグ&ドロップします。
ドキュメントパスに、ファイルが保存されている場所を指定します。
3.Excelワークシートから読み取り
Excelブックのワークシートから、読み取りたいセル範囲を設定します。
1.アクションの「Excel」から「Excelワークシートから読み取り」を「Excelの起動」の下にドラッグ&ドロップします。
取得:ワークシートに含まれる使用可能なすべての値
今回は単純な表形式で、タイトルや他に余計な数値も無いので、セル範囲ではなく、ワークシートに含まれる使用可能なすべての値を選択しました。
詳細:範囲の最初の行に列名が含まれています
列名を取得したいので、チェックを入れます。
フロー実行後の変数(ExcelData)
すべてのワークシートを読み取りたい場合は、別の記事に掲載している「全てのワークシートからExcelDataを読み取る」を参照願います。
4.Excelを閉じる
1.アクションの「Excel」から「Excelを閉じる」を「Excelワークシートから読み取り」の下にドラッグ&ドロップします。
ドキュメントを保存しないでExcelを閉じます。
5.Excelの起動
転記先の空のExcelブックを開きます。
1.アクションの「Excel」から「Excelの起動」を「Excelを閉じる」の下にドラッグ&ドロップします。
空のドキュメントを使用します。
生成された変数「ExcelInstance2」
6.Excelワークシートに書き込み
空のExcelブックに見出しを転記します。
1.アクションの「Excel」から「Excelワークシートに書き込み」を「Excelの起動」の下にドラッグ&ドロップします。
・Excelインスタンス:先ほどExcelの起動で、生成された変数「ExcelInstance2」を使用します。
・書き込む値: %ExcelData.ColumnHeadersRow%と入力します。
※ExcelDataの変数に格納されている、列名のデータをセルに書き込みます。
・書き込みモード:セルを指定したいので「指定したセル上」を選択します。
今回はセルA1に書き込みたいので「列」に「A」、「行」に「1」を入力します。
7.入力ダイアログを表示
入力ダイアログを表示して、社員番号を入力するアクションを設置します。
1.「メッセージボックス」から「入力ダイアログを表示」を「Excelワークシートに書き込み」の下にドラッグ&ドロップします。
・入力ダイアログのタイトル:任意のタイトルを入力します。
今回は「社員番号」と入力します。
ユーザーにどのような行動を促したいか、タイトルでお知らせします。
・入力ダイアログのメッセージ:任意のメッセージを入力します。
「社員番号を入力してください」と入力します。
ユーザーに伝えたいメッセージをお知らせします。
・既定値:ユーザーに入力してもらいたいので、空白にします。
・入力の種類:今回は文字数が少ないので、1行にします。
・入力ダイアログを常に手前に表示する:手前に表示したいので、チェックを入れます。
生成された変数:
Userlnput 入力ダイアログで入力された社員番号を、IFで判定するために使用します。
ButtonPressed ループ条件やIFの最初のオペランドで使用します。
※自分で変数を変更することもできます。
今回は説明のため、変数をそのまま使用します。
8.ループ条件
転記が終わったら、「ループ条件」から「入力ダイアログを表示」に戻る処理を行います。
違う社員番号の行を転記したい場合は、「入力ダイアログを表示」に戻って、社員番号を入力します。
転記を終了したい場合は入力ダイアログのキャンセルを押します。
1.アクションにある「ループ」から「ループ条件」を「入力ダイアログを表示」の上にドラッグ&ドロップします。
2.ループ条件のパラメータを選択します。
・最初のオペランド:入力ダイアログを表示で生成された変数 %ButtonPressed% を入力します。
{☓}から選択することが出来ます。
・演算子:と等しくない(<>) を選択します。
・2番目のオペランド:Cancel と入力します。
9.IF 条件分岐でキャンセル
次に、「入力ダイアログを表示」でキャンセルした場合に、それ以降の処理を行わないようにIFで処理します。
1.アクションにある「条件」から「IF」を「入力ダイアログを表示」の下にドラッグ&ドロップします。
・最初のオペランド:入力ダイアログを表示で生成された変数 %ButtonPressed% を入力します。
{☓}から選択することが出来ます。
・演算子:と等しくない(<>) を選択します。
・2番目のオペランド:Cancel と入力します。
IFの条件分岐で、キャンセルではない(等しくない)場合に処理が実行されます。
キャンセルした場合は、処理が中断されます。
10.For each
「For each」アクションのループ処理で1行ずつ、Excelデータを変数Currentltemに格納します。
1.アクションの「ループ」から「For each」を「IF」の中に、ドラッグ&ドロップします。
・反復処理を行う値:Excelワークシートから読み取りで生成された変数 %ExcelData%を入力します。
※今回生成された変数:CurrentltemにExcelDataが1行ずつ格納され、行数分ループします。
11.IF
「IF」アクションを使用して、「入力ダイアログを表示」で入力された社員番号の数字に該当する場合は、「Excelワークシートから最初の空の列や行を取得」と「Excelワークシートに書き込み」の処理を実行するよう設定します。
1.アクションの「条件」から「IF」を「For each」の中にドラッグ&ドロップします。
最初のオペランドと2番目のオペランドを比較します。
・最初のオペランド:For eachで生成された変数 %Currentltem[‘社員番号’]% を入力します。
・演算子:「と等しい=」を選択します。
社員番号と同じ番号が入力された時に処理を実行します。
・2番目のオペランド:%Userlnput%
入力ダイアログで表示で生成された変数を入力します。
入力ダイアログで入力された番号とCurrentltem[‘社員番号’]を比較します。
12.Excelワークシートから最初の空の列や行を取得
13.「Excelワークシートに書き込み」で空白行を取得するため、「Excelワークシートから最初の空の列や行を取得」のアクションを設置します。
1.アクションの「Excel」から「Excelワークシートから最初の空の列や行を取得」を上記「IF」の中にドラッグ&ドロップします。
Excelインスタンス:ExcelInstance2
生成された変数 FirseFreeRow(行)を次のアクションで使用します。
13.Excelワークシートに書き込み
入力ダイアログで入力された、社員番号の行を転記します。
1.アクションの「Excel」から「Excelワークシートに書き込み」を「Excelワークシートから最初の空の列や行を取得」の下にドラッグ&ドロップします。
・Excelインスタンス:先ほどExcelの起動で、生成された変数「ExcelInstance2」を使用します。
・書き込む値: %Currentltem%と入力します。
For eachのCurrentltemにExcelDataが1行ずつ格納されているので、入力ダイアログで入力された社員番号のCurrentltemからExcelDataを取り出し、指定したセルに書き込みます。
・書き込みモード:セルを指定したいので「指定したセル上」を選択します。
今回は列Aに書き込みたいので「列」に「A」、「行」に「%FirstFreeRow%」を入力します。
行に入力されたデータが上書きされないように、空白のセルに書き込みを行います。
「Excelワークシートから最初の空の列や行を取得」した変数FirstFreeRowを入力し、空白行を取得します。
以上で入力ダイアログで行単位のExcel転記の方法をご紹介しました。