見出し画像

パワーオートメイトデスクトップ(Power Automate Desktop)でExcelの表の行と列を入れ替える方法

本記事を書いた動機:マイクロソフト製無料RPAのパワーオートメイトデスクトップでExcelのデータを取り扱う際に時系列が横になったものを縦に変えて貼り付けたいと考えたところ意外と難しかったため、いろいろ調べた結果をできるだけ分かりやすく備忘録としてまとめました。(読む時間4分程度)


重要な前提知識:パワーオートメイトデスクトップの「Excelのキー送信」というアクションは、キーボードの特定のキーを押すことを指示することでExcel上での操作を自動化する方法です。このキー送信機能を利用することで、Excelの行と列を入れ替えることが可能です。

 1. キー送信を使う方法

Excelの行と列を入れ替える方法はいくつかありますが、キー送信を活用することで効率的に行うことができます。以下に、具体的な手順を示します。

「キーの送信」を使ったフロー例(フロー1)
  • コピー元のExcelファイルを開きます。

  • 「Excelワークシートからセルをコピー」アクションで必要範囲を指定してデータをコピーします。

  • 「アクティブなExcelワークシートの設定」アクションで、貼り付け先のワークシート名を指定します。

  • 「ワークシート内セル選択」アクションで貼り付け範囲を指定します。

  • 「キーの送信」アクションで「{Alt}()HVSE{Return}」(形式を選択して貼り付け - 行/列を入れ替え)を送信します。

以上で、Excelの行と列を入れ替えることができます。(コピーデータを「変数」で保存してないことに注意) 

キー送信の問題点

  • Excel動作時間が安定しないことからパワーオートメイトデスクトップのフローとのタイミングが合わずにエラーとなって止まる場合がある。

2. キー送信以外の方法

キー送信以外のフローを使用してExcelの行と列を入れ替える方法があります。例えば、データテーブルの値を取得し、行や列を入れ替えて貼り付ける方法です。具体的なフローは以下の通りです。 

For each ループを使ったフロー例(フロー2)
  • 「Excelワークシートから読み取る」アクションで必要範囲の行と列を指定してデータをコピーしデータテーブル変数で保存します。

  • 「アクティブなExcelワークシートの設定」アクションで、貼り付け先のワークシート名を指定します。(上記フロー2の最初のアクション)

  • 「Excelワークシート内のセルをアクティブ化」アクションで、貼り付け先の起点となるセルを指定します。

  • 行(intRaw)と列(intColumn)のそれぞれの変数を定めて2重の「For each」ループを使う貼り付けの準備を行います。

  • 内側の「For each」ループのアクションの中に「Excelワークシートに書き込む」アクションを入れて、データテーブル変数1行目の数値を、1列目、2列目・・・の順に貼り付け先の1列目に1行ずつ下がりながら貼り付けて行きます。

  • 外側の「For each」ループのアクションの中に「変数の設定」と「変数を大きくする」アクションを入れて貼り付け先の次の列(intColumn+1)の1行目(FirstFreeRawを指定し、データテーブル変数が終わるまで、貼り付け先の列を変えながら貼り付けを繰り返します。

しかし、一方でこれらの方法には以下のようなデメリットも存在します。

  • フローの数が多くなり複雑になる。

  • 数値を1つずつループさせていくため、処理速度が低下し、大量のデータを扱う場合には適さない。

従って、結論としては、この場合は、キー送信を使う方が優れていると思います。

先に触れたExcelとのタイミングが合わない問題については「キー入力の間隔の遅延」機能などを上手く使えばある程度緩和出来ます。

[補足] パワーオートメイトのキー送信機能について関連記事を書きました。もし、ご興味あれば以下をクリック下さい😀


この記事が気に入ったらサポートをしてみませんか?