Power Automate for Desktop: Excelのテーブルに一気に書き込む

Power Automate for Desktopで名前付きセルがサポートされたため、テーブル名でデータを取得できるようになりました。

Power Automate for DesktopでExcelのテーブルを読み取る

テーブルを読み取るだけでなく、書き込みたい場合があります。


テーブル全体を更新する

名前付きセルを使って、読み取ったテーブルのデータ全てを一気に書きこ戻すことが可能です。

次のようなテーブルがシートにあります。

フローの全体です。

「Excelワークシート内のセルを選択」アクションを使って、テーブル全体を選択します。

選択:    名前付きセル
名前:    テーブル1[[#見出し],[#データ]] 

下の画像には「テーブル1[#すべて]」が指定してありますが、これだと集計行がある時にそれまで取ってきてしまいます。

「Excelワークシートから読み取る」アクションを使って選択範囲を取得します。
取得:    選択範囲の値
詳細:    範囲の最初の行に列名が含まれています をオンにする

Loopを開始します。ExcelData.RowsCountはデータテーブルの行数です。データテーブルのインデックスは0から始まるので、終了条件は1引いておきます。
開始値:    0
終了:    
%ExcelData.RowsCount - 1%
増分:    1

「データテーブル項目を更新する」アクションを使い、データテーブルの消費税額を設定します。
データテーブル:    %ExcelData%
列:    消費税
行:    %LoopIndex%
新しい値:    %ExcelData[LoopIndex]['金額'] * 0.1%

ExcelDataの 金額列から LoopIndex行 の値を取り出し、それに 10%(0.1)を掛けて、消費税列の LoopIndex行に書き込んでいます。

「Excelワークシートに書き込む」アクションを使って、ExcelDataデータテーブルをExcelのテーブルに書き戻します。
書き込む値:    %ExcelData%
書き込みモード:    名前付きセル
名前:    
テーブル1[#データ]

名前にテーブル1[#すべて]を指定してしまうと、列名まで書き換わってしまいます。

実行結果は次の通り。


Excelテーブルの列を更新する

上記の例ではテーブル全てを書き戻しています。これだと式を含んだ列まで書き戻されてしまうため問題があります。

そこで、データテーブルから特定の列だけ抽出して、それを書き戻す例を示します。

変更した部分は次の通りです。

「データテーブル列をリストに取得」アクションを使って、特定の列をリストにします。
データテーブル:    %ExcelData%
列名またはインデックス:    消費税

「Excelワークシートに書き込む」アクションを使って、消費税列だけを書き戻します。
書きこむ値:    %ColumnAsList%
書き込みモード:    名前付きセル
名前:    
テーブル1[消費税]

これで、消費税列のみをテーブルに書き戻すことができます。


ここまでの方法だと、全行を一気に書き戻すことはできますが、Power Automate for Desktopで処理をしながら、その都度テーブルを更新したいときがあると思います。

そのような場合は、Excelワークシートの列と行を指定することになります。次は、それについての方法を書いてみたいと思います。


以下は、上記フローをコピーしたものです。Power Automate for Desktopに貼付すれば再現できるかもしれません。

Excel.Attach DocumentName: $'''Book1''' Instance=> ExcelInstance

Excel.SelectCellsFromExcel.SelectNamedCell Instance: ExcelInstance CellName: $'''テーブル1[[#見出し],[#データ]]'''

Excel.ReadFromExcel.Read Instance: ExcelInstance ReadAsText: False FirstLineIsHeader: True RangeValue=> ExcelData

LOOP LoopIndex FROM 0 TO ExcelData.RowsCount - 1 STEP 1

    Variables.ModifyDataTableItem DataTable: ExcelData ColumnNameOrIndex: $'''消費税''' RowIndex: LoopIndex Value: ExcelData[LoopIndex]['金額'] * 0.1

END

Variables.RetrieveDataTableColumnIntoList DataTable: ExcelData ColumnNameOrIndex: $'''消費税''' ColumnAsList=> ColumnAsList

Excel.WriteToExcel.WriteNamedCell Instance: ExcelInstance Value: ColumnAsList CellName: $'''テーブル1[消費税]'''



コメント

アクセス数の多い投稿

セキュリティ対策ソフトのノートンが詐欺ソフトまがいになってしまってショック

ZIPファイルを開こうとすると、展開を完了できません、と言われる

突然滅茶苦茶遅くなったPCがWindows Updateのキャッシュクリアで復活

Windows セキュリティーのビックリマークが消えない

Power Automate Desktopでブラウザでダウンロードしたファイルを処理する

Excel 2019 クエリが原因で日本語入力の一文字目が勝手に確定する

NEC Aterm WX5400HP をセットアップ

Excel VBAからODBCを使ってデータを簡単に取得する

Teamsで日本語入力すると左上に変換ウィンドウが出る

オカムラ家具のOAチェアー、コンテッサを分解清掃