リモートワークで導入して良かったツール詳しく見る

Microsoft Forms のメールアドレスや電話番号の正常性をチェックする方法

目次

はじめに

じょじお

Microsoft Formsでメールアドレスと電話番号のバリデーション(入力チェック)したかったのでその方法についての記事になります。

memo

バリデーションとは、形式の決まった入力欄に対して妥当性をチェックすることです。

たとえば、下記をチェックします。

  • 郵便番号入力欄に7桁の数字が入っているか、
  • パスワード入力欄に入力された入力値が半角英数字のみか、
  • 氏名入力欄が全角文字になっているか、
  • などなど。

Microsoft Formsにはメールアドレスや電話番号のバリデーションがない?

Microsoft Formsのバリデーション機能
じょじお

Microsoft Formsでメールアドレスと電話番号のバリデーション機能はありません

Microsoft Formsのバリデーション機能は数値型のチェックのみとなります。このため、メールアドレスや電話番号などのテキスト記入欄を作っても、ユーザが入力ミスをした際に、ユーザは気づけないままフォームを送信してしまうケースがあります。

この点をみるとGoogle Formsに比べて機能面で劣っているように感じてしまいますが、Microsoft Formsには上位製品のDynamics 365 Customer Voice(旧:Microsoft Form Pro)があり、そちらではデフォルトでメールアドレスのバリデーションがありますし、正規表現を使ってバリデーションすることもできる機能もありますので、 Microsoft Formsに機能がないことは、上位製品との差別化を図る意味があるのだと思います。

つまり、高度なバリデーションを実装したい場合は、Dynamics 365 Customer Voiceの購入を検討しましょう、ということなのですが、Microsoft Formsでもフォームを送信した後でしたら、Power Automateを使って入力チェックする方法がありましたので紹介したいと思います。先にお伝えしておきますと、この方法は組織内向けのフォームでつかいどころあるかなぁーという感じの内容で、組織外に公開するフォームでは使えないかなと思います。

Dynamics 365 Customer Voiceとは?

Dynamics 365 Customer Voice
Dynamics 365 Customer Voice

顧客向けのフォーム(組織外部向けフォーム)は、 Dynamics 365 Customer Voiceを検討してみると良さそうです。

  • Microsoft Dynamics 365の製品群のひとつでフィードバック管理を目的にしたサービスです。
  • わたしは試用版を少し触っただけなので知識がありませんが、フォームによるフィードバック収集だけではなく、AIによる分析・追跡まで行えるとのことなので、かなりできることは多そうです。

詳細はこちらのMicrosoft公式ページをご覧ください。

前提条件

今回紹介する方法には下記の環境が必要がです。

  • Microsoft 365 Business Standard以上のライセンス(Office Scriptsを利用するため)
  • Power Automateを利用できる環境

Microsoft Formsでメールアドレスと電話番号の入力値の正常性をチェックする方法

じょじお

Power AutomateとOffice Scriptsを使って入力チェックを行います。

フローを作成する手順

  • STEP_A フォームを作成する。
  • STEP_B Office Scriptsを作成する。
  • STEP_C Power Automateのフローを作成する。

フローの説明

フォーム送信をトリガーにしたPower Automateフローを作成して、その中で正規表現を使ってバリデーションします。Power Automateの関数に正規表現の機能がみつからなかったので、正規表現の部分はOffice Scripts(Excel online版のマクロ)を使って補完しました。

  1. フォームが送信されたらフォームの情報を取得する。
  2. Office Scriptsにフォームの情報を渡してバリデーションを行う。
  3. 結果によって下記のいずれかの処理を行う。
    1. バリデーションOK:通常通り処理完了メールを送る。
    2. バリデーションNG:フォームの再送信をお願いするメールを送る。

メールアドレスのバリデーションがNGだった場合、フォーム送信者にメールでNGの旨を通知する仕様になっています。しかし、メールアドレスのバリデーションがNGの場合、組織外の方のメールアドレスは不明となりますのでメール送信ができません。この点が外部向けのフォームでは使えない理由です。

Power Automateフローの完成図

Power automate
Power automate

(STEP_A)フォームの作成

じょじお

図のフォームで解説します。質問1にメールアドレスを、質問2に電話番号を入力してもらう想定です。

Microsoft forms

補足ですが、今回は電話番号は、ハイフンなしの形式を想定しているので、実際のフォームでは、ユーザに対してその旨を注意書きをした方が良いです。

STEP
Microsoft Formsのホーム画面を開きます。
STEP
新しいフォームをクリックします。
Microsoft forms
STEP
質問を追加します。

下記のように質問を追加しました。

  1. 質問1.メールアドレス
    1. テキスト型、必須項目
  2. 質問2.電話番号
    1. テキスト型、必須項目
STEP
フォームの設定を行います。
Microsoft forms

▲三点リーダーをクリックして設定をクリックします。

Microsoft forms

▲「自分の所属組織内のユーザのみが回答可能」の中の「名前を記録」にチェックを入れます。

じょじお

この設定を行わないと、匿名配送になるので送信者のメールアドレスがwからずメールを配信することができません。必ず設定しましょう。

(STEP_B)Office Scriptsを作成します。(Officeスクリプト)

じょじお

Office Scriptsのスクリプトを用意します。今回は下記のように書きました。

function main(workbook: ExcelScript.Workbook,mailaddress:string, phonenumber:string)
{
  let regStr1 = /^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}.[A-Za-z0-9]{1,}$/; //メアド正規表現
  let reg1 = new RegExp(regStr1);
  let regStr2 = /^(0[5-9]0[0-9]{8}|0[1-9][1-9][0-9]{7})$/; //電話番号正規表現
  let reg2 = new RegExp(regStr2);

  let result: regexResult;
  let mailBool: boolean = false;
  let phoneBool: boolean = false;

  if (reg1.test(mailaddress)) {
    mailBool = true;
  } else {
    mailBool = false;
  }

  if (reg2.test(phonenumber)) {
    phoneBool = true;
  } else {
    phoneBool = false;
  }

  result = {
    mailAddress: mailBool,
    phoneNumber: phoneBool,
  };

  return result;

}

interface regexResult {
  mailAddress: boolean;
  phoneNumber: boolean;
}
じょじお

Officeスクリプトを始めて使う方は下記の記事で使用方法を解説していますのでよろしければご覧ください。

(STEP_C)Power Automateフローの作成手順

じょじお

フロー作成しまーす。

STEP
Power Automateのホーム画面を開きます。

Power Automateホーム画面はこちらです。

STEP
自動化したクラウドフローを作成します。
Power automate

①左側メニューの中の「作成」をクリックして、②「自動化したクラウドフロー」をクリックします。

STEP
トリガーに「新しい応答が送信されるとき」を選択します。
Power automate

▲①フロー名に任意の名前を入力します。②Formというキーワードで検索して「新しい応答が送信されるとき」トリガーを選択します。③作成ボタンをクリックします。

Microsoft forms

▲「新しい応答が送信されるとき」トリガーのフォームIDにSTEP_Aで作成したフォームの名前を選択します。

STEP
「応答の詳細を取得する」アクションを追加します。
Power Automate 新しいステップ

▲トリガーの下の「新しいステップ」をクリックしてアクションを追加します。

Power automate

▲「Microsoft Forms」コネクタの中の「応答の詳細を取得する」アクションを追加します。

Column

Microsoft Formsのフォームの中の情報を取得するには?

トリガーである「新しい応答が送信されるとき」で取得できるのは「応答ID」のみで、送信されたフォームの中身がわかりません。

じょじお

フォームの中身の情報を取得するために「応答の詳細を取得する」アクションを使います。

STEP
「スクリプトの実行」アクションを追加します。
Power automate

▲Excelコネクタの中の「スクリプトの実行」アクションを追加します。

  1. 場所:スクリプトを実行するExcelファイルが保存されている場所を選択します。
  2. ドキュメントライブラリ:スクリプトを実行するExcelファイルが保存されているライブラリを選択します。
  3. ファイル:スクリプトを実行するExcelファイルを選択します。
  4. スクリプト:スクリプトファイル名を選択します。STEP_Bで作成したOfficeスクリプトのファイル名を選択します。
  5. mailaddress(スクリプトの入力値)「応答の詳細を取得する」アクションの動的コンテンツである「メールアドレス」を選択します。
  6. phonenumber(スクリプトの入力値)「応答の詳細を取得する」アクションの動的コンテンツである「電話番号」を入力します。

5.6のスクリプトの入力値は、下図のようにスクリプトの引数名が表示されます。

Office scirpts
STEP
「条件」アクションを追加します。
Power automate

▲コントロールコネクタの中にある「条件」アクションを追加します。

⓵に下記の2つの条件式を入力します。

  • mailaddress , 次の値に等しい , true
  • phonenumber, 次の値に等しい, true

②「and」を選択します。

STEP
「はいの場合」の中に「メール送信」アクションを追加します。
じょじお

メールアドレスと電話番号のバリデーションをどちらもクリアした場合の処理となります。

Power automate

▲「Outlook 365」コネクタの中にある「メールの送信」アクションを追加します。

  • 宛先:「応答の詳細を取得する」アクションの動的コンテンツである「Responders’ Email」を選択します。
  • 件名:任意の件名を入力します。
  • 本文:メール本文を入力します。下記のように入力しました。
お疲れさまです。

フォームの送信ありがとうございます。
下記のとおり受け付けました。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
入力内容
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


【メールアドレス】@{outputs('応答の詳細を取得する')?['body/r32b379b4c4014a92a9e7b673b1a0b22f']}
【電話番号】@{outputs('応答の詳細を取得する')?['body/r0ccbc163a25449789067c7eae4514504']}
STEP
「いいえの場合」の中にメール送信アクションを追加します。
じょじお

メールアドレスと電話番号のバリデーションをどちらか一方あるいはどちらもNGとなった場合の処理です。

Power automate

▲「Outlook 365」コネクタの中にある「メールの送信」アクションを追加します。

  • 宛先:「応答の詳細を取得する」アクションの動的コンテンツである「Responders’ Email」を選択します。
  • 件名:任意の件名を入力します。
  • 本文:メール本文を入力します。下記のように入力しました。
じょじお

バリデーションがNGとなった旨を送信者に伝えるようにメール本文を作成します。

お疲れさまです。

フォームの送信ありがとうございます。
入力内容に誤りがあるようです。お手数おかけして恐縮ですが、下記の入力内容をご確認いただきまして再度送信をお願い致します。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
入力内容
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


【メールアドレス】@{outputs('応答の詳細を取得する')?['body/r32b379b4c4014a92a9e7b673b1a0b22f']}
【電話番号】@{outputs('応答の詳細を取得する')?['body/r0ccbc163a25449789067c7eae4514504']}
STEP
フローのテスト実行します。

フローの作成が完了しましたのでフォームを送信してテスト実行してみましょう。

Microsoft forms

▲Microsoft Formsからターゲットとなるフォームを開き、画面右上のプレビューをクリックします。回答を受け付けるモードになりますので回答を入力して送信します。

Outlook
バリデーションOK
Outlook
バリデーションNG(電話番号が全角NG)

▲フォームを送信しましたら、Outlook にメールが送信されますのでメールを確認してみましょう。OKパターン・NGパターン組み合わせてテストしてみて問題がなければ成功です!

Office Scriptsのサンプルコード

先のコードはメールアドレスと電話番号をチェックしました。下記はメールアドレスだけチェックする場合のコードです。

function main(workbook: ExcelScript.Workbook,mailaddress:string):boolean
{
  let regStr = /^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}.[A-Za-z0-9]{1,}$/;
  let reg = new RegExp(regStr);
  let result:boolean;
  if (reg.test(mailaddress)) {
    return result = true;
  } else {
    return result = false;
  }
}

まとめ

じょじお

以上、Office Scriptsの正規表現を使ったMicrosoft Formsの入力チェックの方法について解説しました。

ぽこがみさま

何度もいいますが、組織外部向けフォームでは使えないので、ちゃんとバリデーションしたい方はDynamics 365 Customer Voiceの購入を検討しましょう!

ノンプログラマーでも自動化スキルを身につける。

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!
目次
閉じる