前回はPower Automateを使ってCSVファイルから1行目、1列目のセルの値を取り出す方法を紹介した。これは指定するセルが固定されているためそう難しい操作ではない。今回は逆に、どの位置になるかわからない最後の行の1列目の値をPower Automateを使って取り出していく。

最後の行のデータを取得する方法

Power Automateには「Excelワークシートから列における最初の空の行を取得」というアクションがある。このアクションを使うことで最後の行の次の行番号を取得することができる。

  • 「Excelワークシートから列における最初の空の行を取得」アクションで、最初の空行番号を取得
  • 最初の空行番号を1つ減算し、最後の行番号とする
  • 最後の行番号で1列目のセルの値を取得する

「最後の行番号を取得する」というコマンドは今後もよく使うので、このような方法で取得できることを覚えておこう。

最初の空行の行番号を取得する

まず、前回のフローを用意する。CSVファイルも同じものを使うため、前回を参考にしてCSVファイルも用意しておく。

では、前回のフローを書き換えて今回のフローを作っていこう。

  • 前回のフロー「Microsoft Excelでファイルを開く」

    前回のフロー「Microsoft Excelでファイルを開く」

上記フローの2と4は削除する。そして1の次に「Excelワークシートから列における最初の空の行を取得」アクションを追加する。

  • 1.のあとに「Excelワークシートから列における最初の空の行を取得」アクションを追加

    1の次に「Excelワークシートから列における最初の空の行を取得」アクションを追加

ここでは1列目の値で空行になったかどうかを調査した。1列目が空だったらその行は空だと判断される。空行判断のキーとなる列がほかの列の場合には、ここで列番号を変えておこう。

生成された空行の行番号は「%FirstFreeRowOnColumn%」という変数に収められているので、「メッセージを表示」のメッセージを次のように書き換えて、「%FirstFreeRowOnColumn%」の内容を表示させる。

  • 「メッセージを表示」で「%FirstFreeRowOnColumn%」を表示

    「メッセージを表示」で「%FirstFreeRowOnColumn%」を表示

作り変えたフローは次のようになる。

  • 作り変えたフロー

    作り変えたフロー

フローを実行すると次のダイアログが表示される。

  • フローを実行した結果のサンプル

    フローを実行した結果のサンプル

起動したMicrosoft Excelで124630行を確認すると、次のようにその行からデータが空になっている。

  • 調べた結果の行から空行になっていることがわかる

    調べた結果の行から空行になっていることがわかる

これが最初の一歩だ。

最後の行番号を用意する

次は求めた「最初の空行番号」から「最後の行番号」を作成する。いくつかやり方があるが、最後の行を表現する変数を新しく作成する。「%FirstFreeRowOnColumn%」を直接減算する方法でも良いが、変数名と変数の中身を異なる状態にするとバグの原因になるので、一致させた方が無難だ。専用に新しく変数を用意しよう。

変数は「変数の設定」アクションで作成する。

  • 「変数の設定」アクションで「最後の行番号」の変数を設定する

    「変数の設定」アクションで「最後の行番号」の変数を設定する

最後の行番号を意味する変数を「%LastRow%」にして、変数に「LastRow」と書く。そして値に「%FirstFreeRowOnColumn - 1%」と書く。これで「最初の空行番号」から1を減算した値が「%LastRow%」に設定される。

変数の減算にはアクションが用意されているのでそちらを使ってもよいが、上記方法で設定した方が、意味を明確にできる。処理を複数のアクションに分けると、後でアクションを変更した際に減算処理が消えてしまうなど、エラーが起こる可能性がある。1つのアクションで作っておけばそうした心配はない。

作成した変数を確認できるように「メッセージを表示」を次のように書き換える。

  • 「メッセージを表示」を「%LastRow%」を表示するように編集

    「メッセージを表示」を「%LastRow%」を表示するように編集

作成したフローは次のようになる。

  • 作成したフロー

    作成したフロー

実行すると次のようになる。

  • 作成したフローの実行サンプル

    作成したフローの実行サンプル

起動したMicrosoft Excelで表示された124629行を確認すると、最後の行であることがわかる。

  • 最後の行番号が得られていることを確認

    最後の行の行番号が得られていることを確認

これで最後の行の行番号が取得できた。

最後の行の1列目の値を取得

それでは、前回作成したフローのようにセルの値を表示するよう書き換える。「Excelワークシートから読み取る」アクションを追加し、次のように先頭列は「1」だが、先頭行を「%LastRow%」に変更する。

  • 最後の行の1列目のセルの値を取得するように「Excelワークシートから読み取る」アクションを作成

    最後の行の1列目のセルの値を取得するように「Excelワークシートから読み取る」アクションを作成

「メッセージを表示」で取得したセルの値を表示させる。

  • 「メッセージを表示」で取得したセルの値を表示

    「メッセージを表示」で取得したセルの値を表示

これで今回のフローは完成だ。

  • 完成した今回のフロー

    完成した今回のフロー

実行すると次のようになる。

  • 作成したフローの実行結果サンプル

    作成したフローの実行結果サンプル

起動してくるMicrosoft Excelで最後の行の1列目のセルの値を確認すると、次のように47382になった。

  • 最後の行の1列目の値を確認

    最後の行の1列目の値を確認

このように作成することで任意行数のMicrosoft Excelのデータにおいて最後の行の値を取得することができる。

最初と最後が取得できれば、その間も取得できる

最初の行と最後の行の値が取得できたということは、あとは繰り返し処理を行わせることで、その間の全てのデータを処理できるようになる。この辺りは基本的なプログラミングの知識がある方ならすぐにわかるだろう。

Power Automateはローコードのツールなので、現在主流のプログラミング言語のように込み入った分岐処理や繰り返し処理には向いていない。そうした処理をしたいのであれば、Power Automateではなく、ほかのプログラミング言語の採用を検討した方がよいのではないだろうか。WindowsであればPower Automateの次のステップとしてPowerShellスクリプトの利用に切り替えるというのも悪くないだろう。

徐々にコーディングの要素が強くなっていくが、淡々とこなしていこう。それほど複雑なことをやっているわけではないので、慣れればスムーズに自動化を実現できるようになるはずだ。