\ 楽天BLACK FRIDAYセール! /

Power Automateで文章から文字列を抽出する。(文字数不明ver)

2022/02/18 記事に説明不足な点がありましのでいくつか補足を追記しました。

ぽこがみさま

前回の記事ではメール本文から文字列を検索して抽出しましたね。

じょじお

前回の記事では切り抜く文字が固定の文字数でしたので抽出しやすかったのですが、今回は文字数がわからない場合のケースを想定して文字列を抽出してみたいと思います。

この記事でわかること

  • メール(テキスト)から文字列を抽出する方法について理解できる。
  • 商品名のような固定長ではない文字列を抽出する方法が理解できる。
目次

Outlookなどのメールから文字列を抽出したい

じょじお

下記の要件でメールから文字列を抽出します。今回は商品名のような文字数が多岐に渡るケースを想定しています。

要件

  • 下記のような決まったメールフォーマットから商品名を抽出する。
  • 商品名の文字数は様々

◇◇ 株式会社
〇〇 様

平素よりお世話になっております。
下記の注文をさせていただきます。何卒よろしくお願い致します。


・商品名:猫用おやつ ちゃ〇ちゅ~る
・製品番号:123-T4567
・数量:500個
・納品希望日:2021年11月25日
・納入希望場所:株式会社てじらぼ A倉庫

以上、宜しくお願いします。


じょじお

今回もsubstring関数を使います。

まず、抽出の方法としては、前回の記事と同様にsubstring関数を使用します。substring関数には、①商品名の開始位置と、②切り取る文字数(商品名の文字数)が必要でした。

substring関数の第1引数 抽出開始位置

商品名の開始位置は、indexOf関数で良さそうです。indexOf(‘メール本文’,’・商品名:’)で検索できました。実際に取得されるのは・商品名:の先頭の文字’・’の位置です。実際には5文字後ろから取得したいので5を足します。

開始位置
add( indexOf('メール本文','・商品名:') ,5)

substring関数の第2引数 文字数

商品名の文字数がわからないので、次の行の開始位置から商品名の開始位置を引いた数を商品名の文字数としたいと思います。下の図のイメージです。

substring関数に渡す抽出文字数の考え方

つまり下記のようになります。Sub関数は1番目に渡した引数から2番目に渡した引数を引き算する関数です。

sub(
  sub(indexOf('メール本文','・製品番号:'),1),
  add(indexOf('メール本文','・商品名:') ,5)
)

引き算はsub関数を使う!
https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#add

Power Automateのフローの作成手順

じょじお

それでは実際にフローを作成していきたいと思います。
今回はテストのため、インスタントクラウドフローで作成していきたいと思います。

ぽこがみさま

関数の入力にはPower Automateの試験的な機能の有効化を強くおすすめします。入力領域が広くなり入力がしやすくなります。この記事ではこの機能が有効化されていること前提で解説します。

STEP
インスタントクラウドフローを新規作成します。
Power Automate インスタントクラウドフロー
STEP
「作成」アクションを追加します。(作成)

今回は文字列操作のテストが目的ですので、Outlookコネクタではなく「作成」アクションを受信メールに見立ててフローを作成したいと思います。

ではまず「データ操作」コネクタの中の「作成」アクションを追加します。見つからない場合は「データ操作」というキーワードで検索してみてください。

アクションを追加したらパラメータとして上記のメール本文を張り付けます。

STEP
作成アクションを追加します。(作成(商品名))
indexOf(outputs('作成'),'・商品名:')

▲step2と同様に「作成」アクションを追加します。

Power Automate関数の入力の仕方

関数の入力方法
Power automateの関数の入力方法

▲入力ボックスを一度クリックすると右側に青いボタンが表示されますので「fx」のマークのボタンをクリックして関数入力モードにします。

▲関数入力モードになるのでここに関数を入力します。

▲関数を入力したら右上の×をクリックして閉じます。

関数入力モードに切り替えずに関数を入力すると、関数として認識されずにただの文字列として認識されてしまうことがありますので注意してください。

STEP
作成アクションを追加します。(作成(製品番号))
indexOf(outputs('作成'),'・製品番号:')
STEP
作成アクションを追加します。(作成4)
substring(
    outputs('作成'),
    add(outputs('作成(商品名)'),5),
    sub(
        sub(outputs('作成(製品番号)'),1)
        ,add(outputs('作成(商品名)'),5)
        )
)

▲こちらが最終的に商品名を取得するためのsubstring関数です。

2行目は、第1引数としてメール本文を渡しています。

3行目は、第2引数として抽出開始位置を渡しています。

4行目~7行目は、第3引数として商品名の文字数を渡しています。わかりづらい場合は先の画像「substring関数に渡す抽出文字数の考え方」をご覧いただき、1行ずつ確認してみてください。

STEP
フローが完成しました。

関数の入力ができているか注意してください。

注意!
じょじお

Power Automateでは関数として認識されている場合はカード表示になります。逆に関数として認識されていない場合はただの文字列表示になります。

ぽこがみさま

ただの文字列になってしまっている場合は、関数入力モードに切り替えてから関数を再入力するようにしてください。

Power Automate 関数の入力の良い例
Power Automate 関数の入力のダメな例

まとめ

以上、この記事ではsubstring関数を使って文字数のわからない文字列を抽出する方法について解説しました。次回は正規表現を使ってさらに柔軟に文字列を抽出する方法について解説します。

>次の記事 正規表現を使って文字列抽出(準備中)

Power Automate学習教材

Power AutomateをKindleで学びたい方はコチラ
¥2,200 (2022/12/06 08:56時点 | Amazon調べ)
\楽天スーパーセール開催中!/
楽天市場

▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。

\楽天スーパーセール開催中!/
楽天市場

Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。

¥2,750 (2022/12/06 08:56時点 | Amazon調べ)
\楽天スーパーセール開催中!/
楽天市場

Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。

Microsoft 365/ Power Automate / Power Platform / Google Apps Script…

Power Automateを動画で学びたい方はコチラ

▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。

お役に立てたらシェアお願いします!
  • URLをコピーしました!
  • URLをコピーしました!
目次