はじめに
ごきげんよう、百合宮桜(Miyu)です。
以前投稿した記事に対して「選択肢の文字列に [ や " が含まれていると、replace 関数では意図しない変換が起きる」というフィードバックをいただきました(おいしみさん、ありがとうございます)。
Forms では複数選択形式の回答が テキスト で返ってくるため、特殊文字を含んだ選択肢では期待通りの処理ができないコトがあります。
この記事では、特殊文字を含んだ複数選択の回答を Power Automate で扱い、最終的に SharePoint Lists にカンマ区切りの文字列で正しく登録する方法 を紹介します。
これからお伝えする方法は配列を理解する必要があるので、初心者の方には少しムズカシイです。なので初心者の方は Forms の選択肢の値に [ や " を含まないようにするのが1番です。どうしても [ や " を入れたい時だけ以下の方法をお使いください。
特殊文字が含まれると何が問題になるのか
Forms の複数選択の回答は
Power Automate では以下のようなテキストで取得されます。
["パンダ[シロクロ]","ネコ[かわいい]"]
replace 関数を使って、配列化しようとすると、選択肢内にある [ や " まで置き換えられてしまい、Forms の選択肢とは異なる文字列になります。
解決方法:JSON 関数で配列に変換して処理する
①応答の詳細を取得するアクションで得た複数選択の回答を JSON 関数 を使って、配列化します
JSON(outputs('応答の詳細を取得する')?['body/設問Id'])
②JOIN 関数でカンマ区切りの文字列にする
今回のケースは選ばれた選択肢をカンマ区切りの文字列として、SharePoint Lists に転記したいという要件です。
その為、JSON 関数で作った配列を JOIN 関数 でまとめて、カンマ区切りの文字列にします。
JOIN(JSON関数で作った配列,',')
JOIN 関数は配列を指定した区切り記号で結合する関数です。
これで、特殊文字を含んでいても正しく結合された文字列が得られます。
おまけ1:上記処理を1つにまとめる場合
1つの式にまとめたい場合は以下のようになります。
join(
json(
outputs('応答の詳細を取得する')?['body/設問Id']
),
','
)
おまけ2:結合アクションで実現する方法
関数を入れ子で使うのが難しく感じる場合は結合アクションを利用するという方法もあります。
この場合は 元 というパラメーターに
JSON(outputs('応答の詳細を取得する')?['body/設問Id'])
を入れて
次と結合するというパラメーターで区切り記号を指定します。
パラメーターが分かれているので、関数よりも可視性が高く、メンテナンスをしやすいメリットがあります。
まとめ
いかがでしたか?
特殊文字を含む Forms の複数選択値を扱う場合、テキストのまま処理しようとすると意図しない動作が起こる場合があります。
そのため、
- JSON 関数で配列に変換する
- JOIN 関数で目的の文字列に結合する
という流れが最も安全で確実です。
要件やスキルレベルに応じて、「関数を使う」「結合アクションを使う」など、やりやすい方法を選んでみてください。どのアプローチでも自分や一緒に開発している人がやりやすければ、それが正解です。
ぜひ様々なアプローチを試してみてくださいね💛





