こんにちは、おかちゃんせんせいです!
前回はPower Automate(PA)で設定する前の事前準備についてお届けました。

今回は、実際にPower Automateを使ってGmailに届いたメールの内容を基にしてGoogleスプレッドシートに転記する方法についてまとめます。
- Zendeskからの問い合わせ内容をGoogleスプレッドシートに転記したい。
- PAのそもそもの設定の仕方を知りたい。
- メール本文から必要な項目だけを抽出する方法が知りたい。
目次
4つの事前準備が終わりましたら、いよいよPAを起動します。
PA初心者向けの内容が続きますので、不要な項目についてスキップしてくださいね。
まず、どんなケースでもPAを設定する上でのポイントは全部で3つあります。
- アカウントの接続情報を登録しておく
- 何を基準に処理をスタートするのかを決める
- エラーになりそうな処理については、すぐにエラーに気づくことができるようにする
さらに、今回のケースでは
メール本文から必要な情報を抽出する関数を組む
という点も重要なポイントになります。
4つのポイントを一つずつクリアしていきながら実装することで、スムーズに意図する結果を取得できるようになります。
そこで、今回は4つのポイントを内容の構成上3つに集約して、整理していきます。
※今回の記事ではエラー処理については割愛します。
1-1.Gmailの接続設定
メニューから[詳細]を選択して、[接続]を表示させるため画びょうアイコンをクリックします。

すると、メニューの一覧に[接続]が表示されます。

初めてPAを利用する場合には、何も接続情報がないため下図の状態になっており、『接続の作成』をクリックします。

もしすでに接続情報がある場合には、画面左上の方にある『+新しい接続』をクリックします。

まずは、Gmailから接続の設定を行います。
右上にある検索窓で「Gmail」と入力してEnterを押すと、Gmailアプリが検索にヒットします。
右側にある『+』をクリックして、接続の設定を行います。





1-2.Googleスプレッドシート(Google Sheets)の接続設定
基本的な流れはGmailの時と同様です。

右上にある検索窓で「Google Sheets」と入力してEnterを押すと、Gmailアプリが検索にヒットします。
右側にある『+』をクリックして、接続の設定を行います。





PAを活用する際には、接続するアカウントを決めることと、もう一つ大事なことがあります。
それが、何を基準に処理をスタートさせるのか、ということ。
主な基準は下記3つです。
- 何かをトリガーにする
- 決められた日時に定期実行する
- 手動で実行する
今回のケースでは、Gmailを受信したことをトリガーにして、Googleスプレッドシートに転記をしたいので、指定されたイベントによってトリガーされるようにします。



フロー名に任意名を入力。
下にある検索窓に「Gmail」と入力すると、Gmailアイコン付きで「新しいメールが届いたとき」が一覧に表示されるので、チェックを入れて『作成』をクリックします。
最近のアップデートで初期フロー作成画面では、新デザイナー形式の画面が表示されます。
しかし、アクション数が多いと保存した後に、旧デザイナー形式に結局戻ってしまうため、設定時の段階で画面右上にある『新しいデザイナー』のフラグをOFFにします。
※2023年12月時点での情報

すると、今までの形式の画面に切り替わります。


念のため、接続状況を確認します。
三点リーダーをクリックすると、表示されたメニューの下部にマイコネクションが表示されます。
そのうちの一つに[接続]で追加したアカウントにチェックが入っていることを確認します。
全体像
まずフローの全体像は下図のようになります。

4つ目以降については、スコープという項目をまとめておくことができるアクションを設定しており、段階に応じてアクションを分けることができるようにしておきます。

タイムゾーンの設定
次に、タイムゾーンを変換します。
PAを実行したとき、受信日時が世界標準時間(UTC)で表示されますので、自分自身が在国している国の標準時間になるように変換します。
アクションの追加から、検索窓にて「タイム」で検索。
『タイムゾーンの変換』を選択します。

続いて、『タイムゾーンの変換』の設定です。
日本の場合は、UTC+9時間で計算された時間が日本の標準時間になりますので。下図のように設定します。
最後の書式設定文字列については、任意のものを選択してください。

本文の設定
メール本文から必要な文字列を取得するために、まずは本文の情報を取得する必要があります。
そこで、アクションの追加から『Htmlからテキスト』を選択。
動的なコンテンツから「本文」を選択します。


『Htmlからテキスト』という名前では何のテキストかわからないため、名前を変えておくことをお勧めします。
今回は『本文』と変更しておきます。

メール本文の例は、下記の通りです。
〇名前:山田太郎
〇メールアドレス:taro.yamada@test.com
〇電話番号:0123-456-789
ご確認よろしくお願いいたします。
特定の文字列を抽出するための考え方とは?
メール本文から特定の文字列を抽出するためには、抽出したい文字列が本文中の何文字目から何文字目までにあるかを特定する必要があります。
何文字目かを特定する関数はindexOf関数で、調べたい文字列に対してある文字列が含まれている場合にそのインデックス番号を返す関数になります。
<インデックス番号を取り扱う上での注意事項>
3文字目にある文字列のインデックス番号を取得した場合には、インデックス番号は2となることです。
つまり、1文字目は0になるので、数をカウントする場合には注意しましょう。
では、どの文字列とどの文字列のインデックス番号が取得できれば、特定の文字列を抽出できるでしょうか?
ここで、ポイントとなるのが、固定の文字列――つまり、項目名になります。
たとえば、〇名前:山田太郎で文字列の始まりのインデックス番号を取得したい場合。
「:」という文字列は他にもあるため今回は不向きです。
そこで、固定の文字列である項目名に着手すると、「〇名前:」は必ずどんなケースでも含まれていて、しかも重複しません。
なので、「〇名前:」の「〇」の部分のインデックス番号が取得できれば、「:」の後の取得したい文字列のインデックス番号を取得することも可能になります。
「〇名前:」のインデックス番号 = 20
「〇名前:」の文字数 = 4文字
⇒つまり、頭文字のインデックス番号は24となります。
あとは、最後尾のインデックス番号を取得できれば文字列の抽出は完了です。
最後尾のインデックス番号を直接取得することは難しいため、先ほどと同様で固定の文字列から取得することを考えます。
すると、メール本文の構図は、
〇名前:
〇メールアドレス:
となっているため、今度は〇メールアドレス:のインデックス番号を取得できれば、間接的に最後尾のインデックス番号を取得することは可能になります。
改行分もインデックス番号が1カウントされるため、仮に「〇メールアドレス:」のインデックス番号が28だとすると、28から1を引いた27が名前の最後尾のインデックス番号になります。
以上から、抽出したい文字列はインデックス番号が24~27の間にある4文字の文字列となります。
PA上でインデックス番号を取得するためにはどのように設定すればよいか?
まずは、特定の文字列を抽出するために必要となるインデックス番号を取得することを考えます。
あとからメンテナンスしやすいように、スコープという項目を集約して管理できるアクションを追加し、名前を「1.項目のインデックス番号を取得する」と変えおきます。

インデックス番号を関数で取得して、変数として格納しておくには『作成』というアクションを追加します。
検索窓で「作成」と入力し、[組み込み]というタブを選択し、一覧に表示されている作成を選択します。

そして、追加された作成の中で入力欄を選択。
すると、右側に「動的なコンテンツ」か「式」を追加するダイアログが表示されるので、今回は「式」をクリック。
その下の欄に関数を入力して、『OK』をクリックします。

インデックス番号を取得するindexOf関数では、第1引数にメール本文(本文)。第2引数にインデックス番号を取得したい文字列を設定します。
今回は3つの項目を取得したいので、合計4つのインデックス番号を取得するようにアクションを追加します。
式の入力欄には、下記4つの関数をそれぞれに追加するだけでOKです。
名前インデックス番号:indexOf(outputs(‘本文’)?[‘body’],’〇名前:’)
メールアドレスインデックス番号:indexOf(outputs(‘本文’)?[‘body’],’〇メールアドレス:’)
電話番号インデックス番号:indexOf(outputs(‘本文’)?[‘body’],’〇電話番号:’)
確認インデックス番号:indexOf(outputs(‘本文’)?[‘body’],’ご確認よろしくお願いいたします。’)
関数が正しく適用されると、下図のように表示されます。

これで1つ完成なのですが、
アクション名が「作成」ではなんのデータなのかがパッとわからないため、分かりやすい名称に名前を変更しておくことをお勧めします。
PA上で特定の文字列を取得するためにはどのように設定すればよいか?
次に、特定の文字列を抽出し、取得するためのアクションを追加していきます。
今回もスコープを追加して、名前を「2.項目を取得する」と変えおきます。

インデックス番号を関数で取得して、変数として格納しておくには『作成』というアクションを追加します。
検索窓で「作成」と入力し、[組み込み]というタブを選択し、一覧に表示されている作成を選択します。

そして、追加された作成の中で入力欄を選択。
すると、右側に「動的なコンテンツ」か「式」を追加するダイアログが表示されるので、今回は「式」をクリック。
その下の欄に関数を入力して、『OK』をクリックします。
substring(
outputs('本文')?['body'],
add(outputs('名前インデックス番号'),4),
sub(
sub(outputs('メールアドレスインデックス番号'),1)
,add(outputs('名前インデックス番号'),4)
)
)
上記は名前の文字列を取得する関数ですが、
同じようにメールアドレスや電話番号を取得できるようになります。
substring(
outputs('本文')?['body'],
add(outputs('メールアドレスインデックス番号'),9),
sub(
sub(outputs('電話番号インデックス番号'),1)
,add(outputs('メールアドレスインデックス番号'),9)
)
)
こちらがメールアドレスを取得する関数
substring(
outputs('本文')?['body'],
add(outputs('電話番号インデックス番号'),6),
sub(
sub(outputs('確認インデックス番号'),2)
,add(outputs('電話番号インデックス番号'),6)
)
)
こちらが電話番号の文字列を取得する関数
いくつか関数を組み合わせているため複雑そうに見えますが、
使っている関数はシンプルはsubstring・add・subの3つの関数のみです。
それぞれの関数の意味するところさえ理解できれば、
項目名やメール本文の構造が多少変わっても応用することができます。
それぞれの関数の使い方については、
下記サイトが超わかりやすく解説してくださっていますので、
理解を深めたい方はぜひご覧ください。
Googleスプレッドシートへの転記
最後は、Googleスプレッドシートに転記する文字列をすべて取得できたら、後はGoogleスプレッドシートにデータを挿入するアクションを追加すれば完了です。
まず、アクションの追加から『Google』で検索して、Google Sheetの『行の挿入』を選択します。

アクションの名前を分かりやすい名前に変更しておき、
まずは「ファイル」「ワークシート」を設定します。
「ファイル」には転記するGoogleスプレッドシートのスプレッドシートIDを入力し、ワークシートには転記したいシートには「ワークシート」を選択します。

受信日時:『タイムゾーンの変換』で設定したアクション(今回は、『変換後の時間』)
名前・メールアドレス・電話番号:作成アクションで取得した文字列をそれぞれに設定(※)。
※動的なコンテンツで、作成したアクションを設定(下図参照)

テストメールを送信して検証してみる
ここまで実装が完了すれば、あとは実際にテストメールを送信して、スプレッドシートに転記されるかどうか検証します。
デフォルトの設定では、15分毎に新着メールのチェックが走りますので多少タイムラグはありましたが、無事にスプレッドシートに反映できていることを確認しました。
ちなみに、Power Automateと連携すると、最終列に「__PowerAppsId__」という項目が追加されます。
この「__PowerAppsId__」列はPower Automateが処理をする際に使用しており、自動採番される列ですので削除しないでおきます。

Power AutomateはMicrosoft365を契約していれば、無料の範囲内でも十分活用できる機能が備わっています。
例えば、kintoneと連携したいなどもっと標準機能以外のコネクタを利用したい場合には、プレミアムライセンスの契約が必要になります。
実際に無料の範囲内で活用してみて、もし他にも活用できそうな機能が有料版でできそうな、プレミアムライセンスの契約を検討してみるのもありかもしれません。
エラー処理の方法については、また別記事でまとめることにしますね。
今回は備忘もかねて記事にしましたが、
この記事が何かお役に立てば幸いです。
最後まで読んでいただき、ありがとうございました!