ushisangyo
@ushisangyo

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【GAS】inputBoxで入力した内容がデータの入力規則に違反した場合の処理を記述したいです。

解決したいこと

gasのinputBoxで入力した内容を、特定のセルにsetValueしたいのですが、特定のセルにはデータの入力規則を設定してあります。
そのため、入力規則に違反した場合の処理を"try...catch"文で記述したのですが、catch以降の処理が実行されず、エラー文が出てしまいます。
どなたかご教授いただけますと幸いです。

発生している問題・エラー

エラー	
Exception: セル "特定のセル" に入力したデータは、このセルのデータ入力規則に違反しています。
関数名	@ スクリプト名.gs:行数

該当するソースコード

function 関数名{

  /*
    様々な処理...
  */

    
  try{const hireDay = Browser.inputBox('入社年月日を入力してください (例)2022/07/01',Browser.Buttons.OK_CANCEL);
    if(hireDay == 'cancel'){
      Browser.msgBox('スクリプトを終了します。');
      }else{
        let range = sheet.getRange(7,2);
        range.setValue(hireDay);
      }


 //データの入力規則に違反した内容を入力した場合、ここからの処理が実行されない。

  }catch(e){
    Browser.inputBox('入社年月日が正しく入力されませんでした。従業員個人シートより入力し直してください。')
    return;
  }

 /*
  様々な処理
 */

 
}

自分で試したこと

"try...catch"文でその他のエラーは対応できたのですが、データの入力規則に違反した場合だけ実行されないようです。私の知識不足によるものとは存じますが、何卒よろしくお願いいたします。

0

1Answer

バリデーションのエラーは setValue を try...catch で囲っても捕捉できないようです。そもそもセルのバリデーションチェックするメソッドぐらいは当然あるはずでは…と調べてみたのですが、どうも無いみたいですね。
※数年前から出たままの要望
https://issuetracker.google.com/issues/36762591

では何か方法はないかと検索したらstackoverflowで以下の回答を見つけました。

正直どうしてこうなるのか理解できてないのですが、不正な値の入力直後に getDataValidation() メソッドを呼ぶとバリデーションが失敗した旨のエラーが投げられるらしいのです。なのでそれを try...catch で捕捉しています。具体的なコードは以下のようになります。

  const hireDay = Browser.inputBox('入社年月日を入力してください (例)2022/07/01',Browser.Buttons.OK_CANCEL);
  if(hireDay == 'cancel'){
    Browser.msgBox('スクリプトを終了します。');
    return;
  }else{
    const range = sheet.getRange(7,2);
    range.setValue(hireDay);
    try {
      range.getDataValidation();
    } catch(e) {
      Browser.msgBox('入社年月日が正しく入力されませんでした。従業員個人シートより入力し直してください。');
      return;
    }
  }

※セルのバリデーション設定で「無効なデータの入力」は「拒否」に設定されている必要があります。

1Like

Comments

  1. @ushisangyo

    Questioner

    無事思い通りに動かすことが出来ました!
    いろいろ調べて下さりありがとうございました!

Your answer might help someone💌