このページの本文へ

松本典子の「はじめよう!Azure Logic Apps/Power Automateでノーコード/ローコード」 第26回

特定の件名でメールを受信したら、内容をExcelに書き写すワークフローを作ろう

「文字列検索」コネクタを使って、受信メールから顧客リストを自動作成する

2023年05月29日 08時00分更新

文● 松本典子 編集● 大塚/TECH.ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 こんにちは、Microsoft MVP(Azure / Business Applications)の松本典子です。

 Webサイトに「お問い合わせフォーム」などを用意している会社は多いと思います。そこから定型フォーマットで送信されたメールを、担当者が手作業でExcelに書き写し、顧客リストとして社内に情報共有する――。そんな仕組みをとっている職場も多いのではないでしょうか。

 Microsft 365に含まれる「Microsoft Forms」を入力フォームに使えば、Excelへの記録も簡単に行えますが、通常のメールとして送信する仕組みになっている場合は、自動化に少し工夫が必要です。今回はPower AutomateやAzure Logic Appsを使って、メール本文から特定の文字列を抽出し、Excelに自動で記録するワークフローの作り方をご紹介します。

1. 事前準備

お問い合わせフォームから送信されるメールの例

 今回は、お問い合わせフォームから上図の内容のメールが届くという前提で説明を進めます。メール件名は「資料請求希望」、内容は以下の項目となっています。

 ●会社名
 ●担当者
 ●電話番号
 ●メールアドレス

事前に準備するExcelファイル

 メールから抽出した内容を登録するExcelファイルを作成し、テーブルの設定まで行っておきます。なお「日付」には、メール受信によりワークフローを実行した日時が記録されます。

 ●日付
 ●会社名
 ●担当者
 ●電話番号
 ●メールアドレス

 作成したExcelファイルは、アクセス可能なOneDriveに保存します。このあと作成するワークフローでは、メール本文から各項目の内容を抽出して、このExcelファイルに自動入力します。

2. ワークフロー全体図

ワークフロー全体図(クリックで拡大)

 今回作成するワークフローの全体像は上図のとおりです。特定の件名のメールを受信したら、メール本文内の特定の文字列を検索/抽出する仕組みです。図中のA~Dはそれぞれ、同じアクションを繰り返す部分となっています。

2-1. トリガーの設定

トリガーの設定:Office 365 Outlook

 まずは特定の件名(今回は「資料請求希望」とします)のメールを受信したときだけ自動実行されるように、ワークフローのトリガーを設定します。

 検索窓に「outlook」と入力して、「Office 365 Outlook」コネクタをクリックします。トリガー一覧から「新しいメールが届いたとき (V3)」をクリックします。

 今回は特定の件名のときにだけワークフローを実行したいので、「件名フィルター」に「資料請求希望」と入力します。

2-2. アクションの設定:Htmlからテキスト

出力される内容

 この後のアクションでは、「新しいメールが届いたとき (V3)」コネクタの動的なコンテンツである「本文」を利用します。ただし、この「本文」にはHTMLタグも一緒に出力されます。

 今回は、HTMLタグを含めずテキストのみを利用したいので、まずはHTML形式をテキスト形式に変換するアクションを実行します。

アクションの設定:Htmlからテキスト

 検索窓に「html」と入力して、「Content Conversion」コネクタをクリック。「Html からテキスト」アクションを選択します。これでHTML形式の「本文」がテキスト形式に変換されます。

2-3. アクションの設定:テキストの位置の検索(Aの部分)

アクションの設定:テキストの位置の検索

 先ほど示したワークフロー全体図の「A」部分を作成します。

 まずタブの「組み込み」をクリックし、表示されたコネクタの中から「テキスト関数」を選びます。アクション一覧から「テキストの位置の検索」をクリックします。

アクションの設定:テキストの位置の検索

 このアクションは、あるテキストの中から指定した文字列を検索し、それが何文字目から始まるのかを出力するものです。今回はまず、以下の内容を入力します。これにより「会社名:」というテキストの位置を検索します。

 (1)テキスト:動的なコンテンツ「Html からテキスト」の「本文」を選択
 (2)検索テキスト:メールの項目「会社名:」を入力
 (3)コネクタ名:見た目でわかりやすくするため、「テキストの位置の検索」のコネクタ名を「検索テキスト」の内容と同じに変更

ワークフロー「A」部分の全体像

 同じように「テキストの位置の検索」アクションをメール本文の項目ぶん(今回は担当者、電話番号、メールアドレス)繰り返し作成して、それぞれのテキスト位置を検索しておきます。

アクションの設定:テキストの位置の検索

 なお「テキストの位置の検索」アクションの実行結果(出力)は上図のようになります。たとえば「会社名:」の場合は、0文字目から始まっているので「0」が出力されます。

2-4. アクションの設定:変数を初期化する(Bの部分)

 続いてワークフロー全体図の「B」部分を作成します。

 ここでは抽出する文字列の開始位置を指定します。たとえば今回の会社名の場合、「会社名:ABC株式会社」の「A」の文字の位置(何文字目か)を指定する処理です。

アクションの設定:変数を初期化する

 タブの「組み込み」をクリックし、表示されたコネクタの中から「変数」を選択。アクションの一覧から「変数を初期化する」をクリックします。

アクションの設定:変数を初期化する

 (1)名前:わかりやすい名称を入力。「会社名(開始)」など入力します。
 (2)種類:整数を選択
 (3)値:「式」に以下の内容を入力。数字は項目の「:」まで含めた文字数です。たとえば「会社名:」は4文字なので「4」を入れます。

add(outputs('会社名:')?['body'],4)

(4)コネクタ名:見た目でわかりやすくするため「名前」で入力した内容を追加したコネクタ名に変更

ワークフロー「B」部分の全体像

 同じようにして、メール本文の項目数ぶん「変数を初期化する」アクションを作成します。なお前述したとおり、式の中に書かれた数字は各項目の「:」までを含めた文字数です。したがって、以下のように項目ごとに数字が異なります。 「3」の部分は、各項目の「:」まで含めた文字数を入力なので、以下のように入力していきます。

 ●会社名add(outputs('会社名:')?['body'],4)
 ●担当者add(outputs('担当者:')?['body'],4)
 ●電話番号add(outputs('電話番号:')?['body'],5)
 ●メールアドレスadd(outputs('メールアドレス:')?['body'],8)

2-5. アクションの設定:変数を初期化する(Cの部分)

 ワークフロー全体図の「C」部分を作成します。

 後ほど「D」の部分で各項目の内容テキストを抽出しますが、そのためには各項目の内容の長さ(文字数)が必要です。文字列の長さは固定ではなくその都度変化するので、何らかの方法で割り出さなければなりません。

「ABC株式会社」を抽出したい場合

 各項目の文字数は「次の項目名の先頭位置」から「項目内容の先頭位置」を引くことで割り出せます。上図の例では、「担当者:」という項目名の先頭位置から「ABC株式会社」の先頭位置を引いています。

 ここでは「2-4」と同様に変数コネクタを利用して、この処理を行います。

アクションの設定:変数を初期化する

 (1)名前:わかりやすい名称を入力。「会社名(長さ)」など入力します。
 (2)種類:整数を選択
 (3)値:「式」に以下の内容を入力。

sub(outputs('担当者:')?['body'],variables('会社名(開始)'))

 (4)コネクタ名:見た目でわかりやすくするため「名前」で入力した内容を追加したコネクタ名に変更

ワークフロー「C」部分の全体像

 上と同じようにして、「変数を初期化する」アクションをメール本文の項目ぶん作成します。なお(3)の部分は、それぞれ以下のように入力します。なお「メールアドレス」は最後の項目になるので作成不要です。

 ●担当者(長さ)sub(outputs('電話番号:')?['body'],variables('担当者(開始)'))
 ●電話番号(長さ)sub(outputs('メールアドレス:')?['body'],variables('電話番号(開始)'))

2-5. アクションの設定:部分文字列(Dの部分)

アクションの設定:テキスト関数

 ワークフロー全体図の「D」部分を作成します。

 タブの「組み込み」をクリックし、表示されたコネクタの中から「テキスト関数」を選択。アクションの一覧から「部分文字列」をクリックします。

アクションの設定:部分文字列

 「部分文字列」アクションの設定には、以下の内容を入力します。

 (1)テキスト:動的なコンテンツ「Html からテキスト」の「本文」を選択
 (2)開始位置:動的なコンテンツ「変数」の「会社名(開始)」を選択
 (3)長さ:動的なコンテンツ「変数」の「会社名(長さ)」を選択
 (4)コネクタ名:見た目でわかりやすくするため「名前」で入力した内容を追加したコネクタ名に変更

 これと同じようにして、「担当者」と「電話番号」の「部分文字列」アクションも作成します。

アクションの設定:部分文字列(メールアドレス)

 「メールアドレス」も「部分文字列」アクションを作成しますが、これは最後の項目(抽出したい文字列の後ろに何もない)なので、上図のように「長さ」は未入力にします。

ワークフロー「D」部分の全体像

 Dの部分が完成すると、上図のようになります。

2-6. アクションの設定:Excel Online (OneDrive)

 ここまでで抽出した各項目の内容(文字列)を、OneDriveに用意したExcelファイルに書き込むアクションを作成します。

 検索窓に「Excel」と入力して、「Excel Online (OneDrive)」コネクタをクリックし、「表に行を追加」アクションを選択します。ちなみに、会社のアカウントで「OneDrive for Business」を利用している場合は「Excel Online (Business)」コネクタを使うことになりますが、以下の設定内容は同じです。

アクションの設定:Excel Online (OneDrive)

 以下の内容を入力します。

 (1)名前ファイル:「1. 事前準備」で作成したExcelファイルを選択(今回は「顧客リスト2023.xlsx」)
 (2)テーブル:入力したいテーブルを選択(今回は「テーブル1」)
 (3)日時:Power Automateが出力する日時は、変換しないとUTC(協定世界時)となります。そこで「式」に以下の内容を入力し、「addhours(utcnow(),9)」で日本時間(UTCプラス9時間)に変換します。なお「yyyy-MM-dd」は「年-月-日」のフォーマットで出力させる指示です。

formatDateTime(addhours(utcnow(),9),'yyyy-MM-dd')

 (4)会社名:動的コネクタ「部分文字列(会社名)」を入力
 (5)担当者:動的コネクタ「部分文字列(担当者)」を入力
 (6)電話番号:動的コネクタ「部分文字列(電話番号)」を入力
 (7)メールアドレス:動的コネクタ「部分文字列(メールアドレス)」を入力

 以上でメール本文から特定の文字列を抽出し、Excelに自動入力するワークフローが完成しました。

3. 実行結果

実行結果

 今回は件名が「資料請求希望」のメールを受信した場合にのみ、ワークフローが自動実行されます。メール本文から各項目の内容が抽出され、上図のようにExcelファイルに記録されます。

最後に

 今回紹介した文字列抽出の方法は、文字列自体ではなく文字数で操作しているので少しイメージしにくいかもしれません。

 ただしこの方法を利用することで、メールだけでなくたとえば「Microsoft Teams」のメッセージから特定の文字列を抽出するなど、幅広く利用できるのでとても便利です。ぜひ活用してみてください!

カテゴリートップへ

この連載の記事