Excel アクション

【PowerAutomateDesktop】Excelシートを読み込み、データテーブルとして使用する

PowerAutomateDesktopを触り始めて一番最初に知りたかったことは、Excelシートの読み込みと、読み込んだデータの使用方法、でしたね。

これを知らないことには、業務効率化はできない、と言っても過言ではないと思っています。

本ページでは、そのやり方について解説していきたいと思います。

一番最後に、参考フローをご用意致しましたので、そのままコピー&ペーストして動かしてみて下さい。

1.Excelシートの読み込み

1.読み込むまでのフロー

Excelシートをデータテーブルとして読み込むまでのフローは以下のようになります。
open_excel_flow

Excelシートを読み込むまでのフローとしては、これが基本になるかと思います。

 

2.対象ファイルを立ち上げ、変数に格納する

まず、アクション「ファイルの選択ダイアログを表示」で、対象ファイルのファイルパスを変数SelectedFileに格納しています。
SelectFile

次に、アクション「Excelの起動」で、対象ファイルをインスタンスとして取り込みます。
ExcelInstance

インスタンス化については、Excelブックを、PowerAutomateDesktop上で扱えるように取り込んだ、ぐらいにお考え下さい。
 

3.データが存在する範囲の最終行番号と最終列番号を取得する

データが何も入っていないセルは読み込みたくないので、データが存在する範囲の最終列番号と最終行番号を取得します。

そのためには、アクション「Excelワークシートから最初の空の列や行を取得」で、最初の空の列番号FirstFreeColumnと、行番号FirstFreeRowを取得します。
FirstFreeRowColumn

最初の空の列番号と行番号を取得することができれば、
最終列番号 = FirstFreeColumn - 1
最終行番号 = FirstFreeRow - 1
のように、データが存在する範囲の最終行番号と最終列番号を取得することが可能になります。

ちなみに、上図の黄色セルは、データが存在する最終セルを表し、ショートカットキー「Ctrl + End」を押すことで特定できます。
 

4.Excelシートから列名を取得するパターン

下図の項目名を、そのままデータデーブルの列名として取得するパターンです。
column_name

アクション「Excelワークシートから読み取り」の設定は以下のようになります。
input_ExcelData

ポイントは、
・「先頭行」は、項目名に該当する行番号(この例では3)を指定する
・「範囲の最初の行に列名が含まれています」にチェックを入れること
になります。

以下のように、列名に項目名を割り当てて、データテーブルExcelDataを作成することができました。
ExcelData

 

5.Excelシートから列名を取得しないパターン

基本的には列名を取得するパターンで良いかと思いますが、状況によっては、仕様で決まっている列名Column1、Column2、・・・、で読み込みたい場合もあるかと思います。

以下は、その設定例になります。
input_ExcelData_nolabel

Excelシートから列名を取得するパターンと異なる点は、
・「先頭行」は、データ部分の最初の行(この例では4)を指定する
・「範囲の最初の行に列名が含まれています」のチェックを外す(既定値)
になります。

以下のように、列名をColumn1とColumn2で読み込むことができました。
ExcelData_nolabel

 

2.読み込んだデータテーブルを使用する

1.行インデックスと列名を指定して使用する

作成したデータテーブルは、 %データテーブル名[行インデックス]['列名']% のように使用することが多いです。
put_value

2.行インデックスと列インデックスを指定して使用する

%データテーブル名[行インデックス][列インデックス]% のように使用することもできます。
put_value_index

表示されるメッセージは、['列名']でも、[列インデックス]でも同じで、以下のようになります。
put_value_message

 

2.ループ処理でデータテーブルを使用する

せっかくデータテーブルとして読み込んだのですから、アクション「Loop(ループ)」を使わない手はございません。
フローとしては、以下のようになります。
Loop_flow

アクション「Loop」の設定例は以下になります。
Loop

設定の注意点として、
・「開始値」は、データテーブルの行インデックスの開始値と同じ0にすること
・「終了」は、ExcelData.RowsCount(レコード数)が7なので、行インデックスの最大値6に合わせて、ExcelData.RowsCount - 1 にすること
です。

アクション「メッセージの表示」の設定では、アクション「Loop」で生成される変数LoopIndexを使用します。
put_value_loop

以下のように、LoopIndexが、左から0、1、2、3、4、5、6、とカウントアップされながらメッセージが表示されていきます。
put_value_loop_message

 

3.参考フロー

以下は上記と同じフローであり、右上のコピーボタンを押せば、フロー全体をコピーできます。
PowerAutomateDesktopのMainフローに貼り付けることで、そのまま実行することができます。
都道府県リスト.xlsx

Display.SelectFileDialog.SelectFile Title: $'''「都道府県.xlsx」の選択''' IsTopMost: False CheckIfFileExists: False SelectedFile=> SelectedFile ButtonPressed=> ButtonPressed
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: SelectedFile Visible: True ReadOnly: False Instance=> ExcelInstance
Excel.SetActiveWorksheet.ActivateWorksheetByName Instance: ExcelInstance Name: $'''都道府県'''
Excel.GetFirstFreeColumnRow Instance: ExcelInstance FirstFreeColumn=> FirstFreeColumn FirstFreeRow=> FirstFreeRow
Excel.ReadFromExcel.ReadCells Instance: ExcelInstance StartColumn: 2 StartRow: 3 EndColumn: FirstFreeColumn - 1 EndRow: FirstFreeRow - 1 ReadAsText: False FirstLineIsHeader: True RangeValue=> ExcelData
Excel.ReadFromExcel.ReadCells Instance: ExcelInstance StartColumn: 2 StartRow: 4 EndColumn: FirstFreeColumn - 1 EndRow: FirstFreeRow - 1 ReadAsText: False FirstLineIsHeader: False RangeValue=> ExcelData_nolabel
# データテーブルExcelDataの変数の使用例
Display.ShowMessageDialog.ShowMessage Title: $'''メッセージ''' Message: $'''%ExcelData[0]['コード']%=%ExcelData[0]['名前']%
%ExcelData[1]['コード']%=%ExcelData[1]['名前']%
%ExcelData[2]['コード']%=%ExcelData[2]['名前']%
%ExcelData[3]['コード']%=%ExcelData[3]['名前']%
%ExcelData[4]['コード']%=%ExcelData[4]['名前']%
%ExcelData[5]['コード']%=%ExcelData[5]['名前']%
%ExcelData[6]['コード']%=%ExcelData[6]['名前']%''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
Display.ShowMessageDialog.ShowMessage Title: $'''メッセージ''' Message: $'''%ExcelData[0][0]%=%ExcelData[0][1]%
%ExcelData[1][0]%=%ExcelData[1][1]%
%ExcelData[2][0]%=%ExcelData[2][1]%
%ExcelData[3][0]%=%ExcelData[3][1]%
%ExcelData[4][0]%=%ExcelData[4][1]%
%ExcelData[5][0]%=%ExcelData[5][1]%
%ExcelData[6][0]%=%ExcelData[6][1]%''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
# データテーブルExcelDataの変数をループ処理で使用する例
LOOP LoopIndex FROM 0 TO ExcelData.RowsCount - 1 STEP 1
    Display.ShowMessageDialog.ShowMessage Title: $'''【%LoopIndex + 1%/%ExcelData.RowsCount%】メッセージ''' Message: $'''%ExcelData[LoopIndex]['コード']%=%ExcelData[LoopIndex]['名前']%''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
END
Display.ShowMessageDialog.ShowMessage Title: $'''メッセージ''' Message: $'''終了しました''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed

-Excel, アクション
-,