コラム

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

VBAアセットの環境では、2023年10月17日以降、エクセルの「Flow」から「Power Automate」にサインインできなくなりました
その代わりに、リボンの「自動化」タブ内にある「作業の自動化」からフローを起動できるようになっています。
起動させたいフローが表示されてから、右側の「・・・」をクリックし、「RUN」を選択すると「Flow」と同様の手順で起動できます(現時点では、メニューが日本語化されていません)。
本件につきましては、詳細な情報が得られましたら、改めて記事を更新させていただきます。

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

Power Automateとは何か?

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

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

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

エクセルファイルの準備

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

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

ファイルは、OneDrive上に保存します。OneDriveに保存しておかないとファイルの共有(共同編集)ができません。

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

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

このサンプルファイルは、電話メモの本体の一例です。メールを送信する機能は付いていません。以下の手順でPower Automateを組み込んでいただく必要があります。出来上がったPower Automateのパッケージをエクスポート/インポートすることもできるようですが、それでは「誰でもプログラミングができる」Power Automateを使う意味がありません。

アドインのインストール

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

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

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

メール送信の設定

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を駆逐する」日が訪れるのではないでしょうか。

コメント

  1. 管理人 より:

    「電話メモ」の保存場所を移動させると、動かなくなってしまいます。その場合は、「場所」、「ドキュメントライブ」および「ファイル」の再設定が必要となります。
    まあ、当たり前と言えば、そのとおりなのですが、ファイルの中に完全に組み込まれているVBAに比べると、使いづらさを感じてしまいます。

  2. 管理人 より:

    Excelの「Flow」とOfiice365の「Power Automate」の関係について、不適切な説明がありましたので、削除しました。何となく分かってはいるつもりなのですが、きちんと説明できるレベルには達していません。そのレベルに達したら、改めて追記したいと思います。

  3. 管理人 より:

    「タイムゾーンの変換」アクションに関する情報を追記しました。

  4. 管理人 より:

    サンプルファイルにメール送信の機能が含まれていないことを明記しました。

  5. より:

    参考にさせて頂きたく、有り難く拝見させて頂きました。電話メモのデータをDLし、エクセルオンラインでSharepointに置いています。メアドも有効なメアドに変えています。
    一つ教えて頂きたいのですが、『メール送信日時の設定』の直前の説明で、「ここまででメール送信だけは可能になる」となっていますが、フロー実行のボタンはPower Automate画面のどこに表示されるのでしょうか。送信日時の設定はまだしていません。まだしていませんが、そこまでのフローはフローチェッカーでもエラーは発見されず、一応組めていると理解できる状況です。実行して、メールが飛ぶか確認したいので、教えていただけないでしょうか。よろしくお願いいたします。

    • 管理人 より:

      コメントありがとうございます。
      「実行」ボタンの位置が分かる図を追加してみました。
      これで回答になっていれば良いのですが...

  6. より:

    ご返信ありがとうございます。昨日来、エクセルオンラインのデータタブにFlowが表示されていない状態でフロー構築し、フローとしてもエラー検出されませんでした。しかし原因はエクセルオンラインとのPower Automateの連携に有りと推測し、エクセルオンラインのデータタブにFlowを表示させる方法をネットで何とか調べ、表示に成功しました。その後、こちらを参考にし、先ほど実行に成功しました。ありがとうございました。

  7. ピか中 より:

    パワーオートメイトでExcelテーブルからメールを送信したいのですが、会社名が一緒だったら、メール本文にすべてのno.事業所名 数字を各行を取り纏めて記載し、一通の送信をしたいのですが、中々、サンプルが無くて困っています。教えていただけると嬉しいです。各行や変数設定が未だ理解不足なのでお願いします。

    • 管理人 より:

      コメントありがとうございます。
      申し訳ありませんが、私には分かりませんでした。
      実は、この記事を書いた後すぐに勤務先の環境が変更になり、Power Automateは使わなくなってしまっていて、ここに書いた以上の知識は何もないのが実情です。

      ちなみに、ChatGPTに「パワーオートメイトでExcelテーブルからメールを送信したいのですが、会社名が一緒だったら、メール本文にすべてのno.事業所名 数字を各行を取り纏めて記載し、一通の送信をしたい。」と質問すると、何だか使えそうな手順を示してくれます。
      一度試してみては、いかがでしょうか?

      • ピか中 より:

        ありがとうございます。散々chatGptに投げ掛けるのですが、肝心なところが表現がアバウトで解らなくて、伺ってみました。こんな感じの自動化は多そうなのですが見つからずでした。返信ありがとうございました。gptも気まぐれなときがあるので、聞き方を変えて又やってみます。

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