Power AutomateでExcelの特定の行に対していろいろやる

Power AutomateからExcel行の検索と更新をする方法。

Power AutomateはVBAを地上から一掃するために投入されたMicrosoftの新兵器です(誤)。

Excelで特定の行の特定の列の値を書き換えたいというシチュエーションは、ままあるでしょう。「VBAをぶっ壊す」を標榜(非公式:オレ脳内)するPower Automateでは、もちろんそんなの余裕です。

準備

前回やったメール受信をトリガーにしたフローをベースに、OneDrive上のExcelファイルの特定行の値だけを書き換えるフローを作成します。

OneDriveのルート直下に vote フォルダを作成し、その中にExcelファイルを作成しました。ファイル名は saitama_old_city.xlsx です。

pam_row_update1.png

ここまでで、だいたい何をしようとしているか察していただけると思いますが、このファイルを開いて次のようなテーブルを作成しました。テーブル名は vote としました。

pam_row_update2.png

ここまできたらもうわかりましたね。そう、さいたま市の旧市人気投票です。

投票者はメールの件名に自分のお気に入りの市名を記載して集計担当のメルアドへ送信します。そこから先はPower Automateが自動処理を行い、該当する市名の票数カウントを増やしていきます。集計担当はお茶でも飲んで待っていればいいわけです。

フロー作成

では、さっそくフローを組んでいきますが、はじめにお断りしておきます。このような処理をPower Automateでやる意義は皆無です。

今回はフローの作成方法を紹介するサンプルとしてピッタリだったので、あえてやっていますがMicrosoft365には投票・集計用途に特化したFormsというアプリがあるので、本気で運用するならそっちを使いましょう。

前回はテンプレートから作成しましたが、今回はまっさらな状態からいきましょう。

Power Automateのサイトへアクセスしたら左ペインのメニューから作成をクリックします。

pam_row_update3.png


フローのタイプを選択する画面になります。自動化されたクラウドフローを選択します。

pam_row_update4.png

ポップアップしたダイアログでフロー名とトリガーを設定します。

フロー名はvote_saitama_cityにしました。
トリガーは新しいメールが届いたとき Outlook.comにします。

Office365版のOutlookにも同じ名前のトリガーがあるので注意してください。個人アカウントの場合はOutlook.comの方じゃないとダメです。

作成ボタンを押します。

pam_row_update5.png


フローの編集画面になります。メールを受信したら処理開始のトリガーはすでに設定された状態です。

pam_row_update6.png


新しいステップボタン
を押します。アクションの候補がたくさん表示されるので、Excelで検索して絞り込みExcel Online(OneDrive)を選択します。

pam_row_update7.png

Excel Online(OneDrive)で実行できる処理が一覧表示されます。行の更新というそれっぽいアクションがあるので、そっちを選んでしまいたいところですが、今回は票数を加算するという処理が必要なので、まず更新対象である行の得票数を取得しなければなりません。そのために1ステップを消費します。

アクション一覧から行の取得を選択します。

pam_row_update8.png

パラメーターを設定する画面になります。

ファイル名、テーブルにはOneDriveに保存したExcelファイルのものを指定します。テキストボックスをクリックすると候補が表示されるのでそこから選択します。

キー列旧市名を選択します。これも候補ででるので選びます。

キー値は前のステップ(トリガー)から引き継がれたデータが候補にでます。つまり受信したメールのデータです。件名を選択します。

どういった処理がおこなわれるかというと、指定したファイルのテーブルのキー列からキー値を探し出して一致した行を取得します。

ここまでの設定を終えると次の画像のようになります。

pam_row_update9.png

なお、投稿日時点で私の環境では選択肢のフォルダ階層を下りていくときの操作性がもっさりすぎて終わってます(個人の感想です)。ゆっくり確実にクリックして選択されていることを確認しましょう。

ここまでのステップで メール件名で 旧市名列を検索し 該当する行(以下 対象行) が取得されました。以降の処理では、対象行の中身が選択肢として出てくるようになります。

フローで関数を使う

新しいステップボタンでもう一度Excel Online(OneDrive)を選択して、今度は行の更新を選択します。

pam_row_update10.png

行の取得の時と同様にファイル、テーブルの指定と行の選択のパラメーターを指定します。行の取得のときと違い、列名のテキストボックスが出てきます。

pam_row_update11.png

この列名テキストボックスはこの列名に何を入れますか?という意味です。今回は投票数を1増やして入れますのでひと工夫します。

票数のテキストボックスの入力候補から式タブを選択します。

pam_row_update12.png

式の候補から int(value) を選択します。Excelでいうところのワークシート関数です。前ステップで票数が文字列として取得されているので、計算用に数値として評価するためintで変換します。

pam_row_update13.png

fxへ int() が入力されます。

pam_row_update14.png

その状態で動的なコンテンツタブへ切り替えます。
行の取得から引き継がれたデータが表示されているので、票数を選択します。

pam_row_update15.png

int( ) の中に何やら怪しい文字列が入ります。

pam_row_update16.png

これはPower Automateが内部で使用している生のパラメーターみたいです。間違って消したり書き換えたりしないように注意しましょう。

続いて、加算のための関数を追加します。

もう一度、式タブに切り替えてadd(summand_1, summand_2)を選択します。

pam_row_update17.png

fxにadd()が入力されます。このaddの第一引数にすでに入っているint(outputs略)を設定します。第二引数加算する数値を指定します。

よってfxのテキストボックスを若干書き換えて、最終的に次の文字列にします。

add(int(outputs('行の取得')?['body/票数']),1)


これで対象行の票数を1足して書き換えるという処理が完成です。

OKボタンで確定して候補を閉じます。

すべての設定が終わると次の画像のようになります。

pam_row_update18.png

同じ処理を2回設定しなければならず、少し冗長に感じますが、現状これ以外の方法はなさそうです。そのうちアップデートで取得更新アクションができるかもしれませんね。

保存ボタンで保存します。

フローを実行する

それでは実際にちゃんとうごいているのかやってみましょう。保存した瞬間からフローはトリガーイベントを待ち構えています。

次のようなメールを送ります。

pam_row_update19.png

Excelファイルを開いてみると

pam_row_update20.png

ばっちり加算されていますね。もし同じ処理をVBAでゴリゴリ書いていくとしたら気が滅入りますよね。

最初にも言いましたが、たとえば複数人が同時に同じ市名に投票したらどうなっちゃうの?といった問題があるので、本気でこういうことをやるならFormsを使いましょう。

フローがうまくいったのか、コケたのかは概要画面の下の方にある実行履歴で確認できます。

pam_row_update21.png

失敗している場合、履歴をクリックするとどのステップでコケて、そのときにどのようなパラメーターをわたして、どう出力されたかまで確認できます。エラー解析に関してもVBEよりはるかに優秀ですね。

VBA駆逐まで待ったなし!

つづく。


つづきができました。

related pages
VBAからLINEにメッセージを送る
LINE Notify APIにVBAからリクエストする方法。

LINE Notifyというサービスがあります。API経由でLINEにメッセージが送れます。これをVBAから利用できればいろいろ面白いことができそうですよね。たとえば、Excelファイルのイニシャライズイベントに仕込んでおけば、ファイルが開かれたらLINEにメッセージが届きます。発想次第で画期的な何かが生まれそうな予感がします。

Read More ...
Power Automate DesktopからODBCでデータベースに接続する
Power Automate Desktopでデータベースを使う方法。

Power Automate Desktopではデータベースを扱うことができます。そもそもデータベースを使えるようなスキルを持っているのならば、自動化の手段にRPAを選択する必要はない気もしますが、使えるっていうのなら使ってみたいですよね。というわけでODBCでデータベースを操作します。

Read More ...
複数行を条件にしたがいまとめる
重複しているデータを行ごと統合します。

データベースでいうところの主キーが重複して存在するテーブルライクなExcelシートのデータを、主キー制約に違反しない形へ条件にしたがいまとめて別シートへ書き出すという処理を作ります。

Read More ...
この記事の
作成日

2020-12-16

更新日

2021-05-07

ページ内検索
目次
WEB MASTER
さいた
神エクセル撲滅協会理事(自称)
さいたま市民 埼玉こそ地上の楽園