コラム

Power Automateによるエクセルからのメール送信

当サイトの「サンプル」で紹介している「電話メモ」は、VBAを使ってメールを送信できるようになっています。しかし、最近利用者が増えているExcel Onlineでは、VBAが使えません。そこで、Power Automateと呼ばれる機能を使って、メールを送信できるようにしてみました。

Power Automateとは何か?

Power Automateとは何なのかについては、すでに多数の記事がネット上に公開されていますので、そちらをご参照ください。

その中でも、VBAをご利用の皆様に特におすすめしたいのは、こちらの記事です。ちょっとショッキングなタイトルですよね。

こちらのサイトには、メール送信の行い方についても、詳しい記事が公開されています。私が紹介するサンプルは、「エクセルに入力したデータをメールで送る」という単純なものですが、こちらで紹介されているのは、「期限内にメールへの返信がない人に、自動的に督促メールを送信する」という、より高度なものとなっています。

エクセルファイルの準備

まず最初に、電話メモの本体であるエクセルファイルを作成し、保存します。

シートにテーブルを設定して、「メールアドレス」と「メール送信日時」の列を作成しておきます。テーブルを設定しておかないとPower Automateで処理を行うことができないので、注意してください。

細部は、こちらからサンプルをダウンロードして確認してください。

ファイル形式は、「.xlsx」にしてください。(私の環境では、マクロが有効な「.xlsm」では、Power Automateによる処理ができませんでした。)

ファイルは、OneDrive上に保存します。OneDriveに保存しておかないとファイルの共有(共同編集)もPower Automateによる処理もできませんので、注意してください。

アドインのインストール

Excel OnlineからPower Automateを利用できるようにアドインをインストールします。

「挿入」-「アドイン」をクリックして、「Microsoft Flow」というアドインをインストールしてください。

細部については、こちらのサイトを参照してください。

このMicrosoft Flowは、後ほど使用するOffice365のPower Automateと名前が異なっていますが、ほとんど同じ機能を持っています。

メール送信の設定

Power Automateを使って、メールを送信できるように設定します。

Excel Onlineの「データ」タブから「Flow」をクリックすると、右側にFlowのウィンドが開きます。

「新規」をクリックして、「テンプレート」を表示してください。

「選択した行の電子メールを送信する」というテンプレートを探して、クリックします。

Excel OnlineとOffice 365 Outlookが接続先として表示されますので、「続行」をクリックしてください。

「選択した行」のステップに「読み込んでいます…」がしばらく表示されたのち、編集が可能になります。(Power Automateの編集は、かなり重いです。特に各ステップの読み込みは、私の環境では1分程度の時間がかかります。じっと我慢してください。)

Power Automateに関する用語などは、こちらの記事を参考にしてください。

「場所」、「ドキュメントライブ」および「ファイル」については、Flowを起動したファイルのものが自動的に入力されているはずです。
「テーブル」の項目をクリックして、メール作成に使用するテーブルを選択します。サンプルの電話メモの場合は、テーブル名が「電話メモ」になっていますので、これを選択します。

その下に「Email」と「Subject」の入力項目が表示されていますが、これらは電話メモのテーブルから自動入力させますので、右側の「…」をクリックして、「フィールドをオプションにします」をクリックします。(この時点では削除できませんので、後で削除します。)

次に「Send an email」のステップを編集します。「宛先」の「Email」の右側の「✕」印をクリックして、削除します。「;」も削除してください。「選択した行」のパラメータが表示されますので、「メールアドレス」をクリックして設定してください。(メールアドレス(formatted)というパラメータもありますので、書式も含めてメールに反映したい場合は、こちらを使うのかも知れません。)

同じように「件名」に「誰から」を設定してください。表示された「誰から」の後に「から電話がありました」と入力しておくといいと思います。(お好みに応じて変更してください。)

次に「本文」に入力させたい項目を同じように選択します。改行や文字列を入力できますので、お好みに応じて修正してください。

もう一度、「選択した行」のステップに戻り、「Email」と「Subject」の「…」をクリックして、削除してください。(「Send an email」のステップで自動入力するため、入力を促す必要がありません。)

これでメール送信の設定は完了です。「保存」をクリックして、フローの設定を完了させてください。

左上の「←」をクリックして前のページに戻り、「実行」をクリックしてください。画面の表示に従って、「続行」、「フローの実行」、「完了」をクリックすると、「電話メモ」で選択されている行のデータに基づいてメールが送信されるはずです。

メール送信日時の設定

ここまでの設定でメールの送信はできるようになりましたが、「メール送信日時」の入力ができていません。「選択した行の電子メールを送信する」というテンプレートには、このステップが含まれていませんので、追加する必要があります。

Power AutomateをExcel Onlineから起動するためには、Flowのアドインが必要ですが、それ以外の操作・編集は、Office365のPower Automateアプリでも行うことができます。こちらの方がテストやエラー表示ができて便利なので、ここからはPower Automateアプリを使用して作業を進めます。

細部未確認なのですが、私の環境では、Power Automateでテストを行った場合、「選択した行」を把握するためのExcelファイルが違うファイル(以前使用した別のファイル)になってしまう場合があるようです。
テストの結果に違和感のある場合は、Excel OnlineのFlowから起動し、実行履歴のみをPower Automateで確認した方が良いかも知れません。

Office365のアプリ起動ツールから「Power Automate」を起動します。

「マイフロー」を起動すると作成した「選択した行の電子メールを送付する」というフローが表示されるはずです。

「編集」をクリックするとFlowアドインと同じような画面が表示されます。それぞれのステップをクリックすると内容が編集できるようになります。

「新しいステップ」をクリックし、「行の更新」を追加してください。「場所」、「ドキュメントライブラリ」、「ファイル」および「テーブル」は、「選択した行」と同じ内容に設定してください。

「キー列」には、テーブルに入力されたデータベースのキーとなる列の項目名を入力します。サンプルのファイルの場合には、「番号」を選択してください。

「キー値」には、現在選択されている行の「キー列」の値を入力します。サンプルファイルの場合は、「番号」のパラメータを選択してください。

次に「メール送信日時」の項目に現在の日時を入力します。「メール送信日時」をクリックし、「動的なコンテンツの追加」をクリックし、「式」を選択して、「utsNow」を選択します。

この状態で保存し、右上の「テスト」、「自動」、「最近使用したトリガーで」をクリックしてから、過去のトリガーを選択し、「保存&テスト」をクリックしてください。電話メモの選択している行の「メール送信日時」にテストを行った時点の日時が入力されるはずです。

ただし、良く見るとエクセルの日時データになっていないし、時間も標準時間になってしまっています。

「行の更新」ステップを編集状態にして、メール送信日時に入力されている「utcNow()」を一旦削除してください。「動的なコンテンツの追加」をクリックし、「式」をクリックしてから「fx」と記載されたテキストボックスに、次の数式を入力して、「更新」をクリックしてください。

addHours(utcNow(), 9, ‘yyyy/MM/dd HH:mm:ss’)

この数式を完全に理解するには、JavaScript(またはTypeScript)の知識が必要となりますが、要は、標準時間と日本時間の差(9時間)を加え、表示形式を設定しています。この設定に関しては、次の記事を参考にさせていただきました。

「保存」をクリックしてから、もう一度テストを行ってみてください。今度は、「メール送信日時」が正常に入力されているはずです。

VBAからPower Automateへ

私がVBAを使い始めたのは、20年以上も前のことです。当時は、この機能がまさかこんなに長く使い続けられるとは思っていませんでした。私の世代は、PCといえばBasicでコマンドを入力することから始めるのが当たり前でしたが、今の若い世代は、最初からGUIやScriptになじんでいます。ここ最近取りざたされているVBAからPower Automate(およびOffice Script)への変化は、起こるべくして起こっていると言ってよいでしょう。

現時点では、まだ、プログラムの実行や編集の速度が遅い、エクセルからの起動方法の選択幅が狭いなど、VBAに一歩譲る部分もありますが、冒頭に紹介した記事のとおり、そう遠くない時期に「Power AutomateがVBAを駆逐する」日が訪れるのではないでしょうか。

コメント

タイトルとURLをコピーしました