PowerAutomateで2つの文字列から差分を取得したい

2022/05/22

AAAA_BBBBのような文字列と、BBBBという文字列があり、AAAAの部分だけを抽出する必要があったので、いろいろ考えた末、replace関数をつかえばうまくいったので紹介します。つなぎ文字をつかってsplitで配列にわけて・・・なんてことも考えましたが、シンプルに邪魔な部分を消してしまうほうが手っ取り早いですね。

まず、文字列を初期化して設定しました。考え方としては、ひとつめから、_BBBBを消し去ればよいということになります。

3つ目の文字列変数「回答」に式として以下のようにreplace関数を設定しました。第1引数にはAAAA_BBBBが入った変数。変数はvaliablesで取得します。第2引数は、差し替える部分の文字列。これも同じくBBBBが入っている文字列変数「ふたつめ」を指定しています。忘れてはいけないのは第3引数の「"」です。つまり、空文字に差し替えるということは、BBBBを消してしまえ!という指定になります。

このフローを実行した結果がこちら。あれれ?アンダーバー「_」が残っちゃいましたね。第2引数のBBBBだけではアンダーバーも一緒に消せないので、前に「_」&「BBBB」の形にして第2引数に指定してやる必要があります。

ここがハマりポイント。PowerAutomateの式では、よくあるプログラミング言語のように文字列を&でつなげることができません。エラーになります。

この時に使うのがconcat関数です。以下のように変更して実行した結果がこちらです。こんどはバッチリAAAAの部分だけが抽出できました。色を付けている部分がconcat関数で、第1引数と第2引数を連結する役割を果たします。この部分が外側にあるreplace関数の第2引数になっています。

テーブルでループを回して実際に使ってみる

試しにこんなテーブルを作りました。フルネームが姓名の間にスペースもなく、姓だけの列はあるのでそこから名だけを抽出したいというような例です。

フローにしてApply to eachで回してやると、こんな感じのJSONになります。JSONの中身を確認したい場合には「作成」を入れて、現在のアイテムを入力に入れてやると便利です。

今回はフルネームから姓の部分を取り去った「名」だけを、とりあえずtmp文字列変数に入れてみました。

ばっちり、海老蔵さんの名だけが抽出できました。

最後に、取得できた「名」をエクセルのテーブル「名」列に書き込んでやります。「行の更新」を使います。Aplly for eachのループの中で今差し替えるべきキー列に「フルネーム」を指定して、「名」列に先ほどreplace関数で抽出した内容を書き込みます。

ブラボー! 名前が抽出してテーブルへの書き込みまでできました。

他にもちょっとしたPowerAutomateの小技を集めて書き溜めていますのでこちらからご覧ください。