Excel ワークシート内のセルを検索して置換する アクションは対象のExcelファイルから任意の値が存在するセルの位置を検索し取得、もしくは別の文字に置換するアクションです。
完全一致のみならず、対象とする値を含むセルを検索できるため、行や列の抽出にも非常に役立つアクションとなります。Power Automate Desktopのアクション「Excelワークシート内のセルを検索して置換する」を使って検索と貼り付けを行った。
エクセル「氏名と番号の表」から社員の氏名を検索して、別のエクセル「順番が入れ替わている氏名の表」にある同性の行に番号をコピー(書き込み)する作業を自動化した。
全体のフロー
フロー、各行の説明
「社員データ②」tamu02.xlsxを開く
「Excelの起動」
エクセル「順番が入れ替わている氏名の表」(番号の列が空欄の表)を開きます。
「社員データ①」tamu01.xlsxを開く
「Excelの起動」
エクセル「氏名と番号の表」を開きます。
tamu01.xlsxの表を開きます。
こっちは中身を読み取るだけなので、「インスタンスを表示する」をOFFにしておきます。
エクセルワークシートから読み取る
「Excelワークシートから読み取る」
tamu01.xlsxに含まれる使用可能なすべての値を読み取り「ExcelData」に保存します。
ここまでで「実行」して、変数「ExcelData」をダブルクリックすれば、変数の中身がみられます。
読み取ったデータ分 処理を繰り返す
「For each」
アクション「For each」を使って、変数「ExcelData」の行数分、次行での検索を繰り返します。
For eachでは、あらかじめ読み取ったデータベース型の変数(ExcelData)を[反復処理を行う値]として指定します。For eachは、反復対象(Exceldata)のデータを1行ごと順に抜き取り、繰り返し処理を行うアクションです。
1行ごとに抜き取ったデータは、変数%CurrentItem%(カレントアイテム)に行単位で格納しながら、処理を繰り返します。
「氏名」を行数分検索する
「Excelワークシート内のセルを検索して置換する」
ここで新アクション「Excelワークシート内のセルを検索して置換する」を使います。
エクセル「tamu02.xlsx」で「氏名」を含む全てのセルを検索し、列・行のインデックスを「Cells」に保存します。
検索対象に一致したセルの場所が、列と行に分かれてDatatableとして出力されます。
検索モードは、Excelワークシートから対象の値を含むセルの行、列を検索するのか、値を別の値に置換するのかを選択します。
Excelファイルに対して対象行もしくは対象列を抽出して処理を行う場合は「検索」、値に対して無駄なスペースを消す、といった一括で置換処理をしたい場合は「検索して置換」を選択します。
ここまでで「実行」して、変数「Cells」をダブルクリックすれば、変数の中身がみられます。
検索結果:変数の値は「2列目の6行目」となっています。
1行しかないのは「For each」の最後の行が見えているからなのか?
一致した「番号」を書き込む
「For each」
「Cells」がDatatableなので、For eachにします。
エクセル「tamu02.xlsx」の列+1および行のセルに一致した「番号」を書き込みます。
書き込む場所は、検索一致した「氏名」の場所のひとつ右の列。+1
「社員データ②」 tamu02.xlsxを保存して閉じる
「Excelを閉じる」
最後に「社員データ②」 tamu02.xlsxを保存して閉じます。
※エクセル表は書き込める状態にしておいてください。読み込み専用だとエラーになります。
実施結果
実施結果1
一致した番号が tamu02.xlsxに書き加えられました。
実施結果2(空欄がある場合)
D列の数字の意味は不明ですが、空欄を11478に定義したからでしょうか?。
使用データ
社員データ① tamu01.xlsx
社員データ② tamu02.xlsx
参考:社員データ③ tamu03.xlsx 結果出力
フローのテキストデータ tamu.txt
今回作成したフローのテキストです。コピーして利用してください。
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''C:\\Users\\DELL\\Desktop\\tamu02.xlsx''' Visible: True ReadOnly: False Instance=> tamu02
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''C:\\Users\\DELL\\Desktop\\tamu01.xlsx''' Visible: False ReadOnly: False Instance=> tamu01
Excel.ReadFromExcel.ReadAllCells Instance: tamu01 ReadAsText: True FirstLineIsHeader: True RangeValue=> ExcelData
LOOP FOREACH CurrentItem IN ExcelData
Excel.FindAndReplace.FindAll Instance: tamu02 TextToFind: CurrentItem['氏名'] MatchCase: False MatchEntireCellContents: True SearchBy: Excel.SearchOrder.Rows Cells=> Cells
LOOP FOREACH CurrentItem2 IN Cells
Excel.WriteToExcel.WriteCell Instance: tamu02 Value: CurrentItem['番号'] Column: CurrentItem2['ColumnIndex'] + 1 Row: CurrentItem2['RowIndex']
END
END
Excel.CloseExcel.CloseAndSave Instance: tamu02
まとめ
Excelの検索ができるアクション「Excelワークシート内のセルを検索して置換する」は、対象のExcelファイルから任意の値が存在するセルの位置を検索し取得、もしくは別の文字に置換するアクションです。
完全一致のみならず、対象とする値を含むセルを検索できるため、行や列の抽出にも非常に役立つアクションとなります。
とりあえず使ってみただけなので、今後もう少し研究してみます。
コメント