• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:スプレッドシートの日付チェック)

スプレッドシートの日付チェック方法

このQ&Aのポイント
  • スプレッドシートのスクリプトを使用して、チェックされた行の日付を別のシートに転送する方法について教えてください。
  • 入力された日付が有効な形式かどうかをチェックする方法について教えてください。
  • スプレッドシートの日付チェックについて質問です。ボタンをクリックすると、チェックされた行の日付を別のシートに転送したいのですが、有効な日付形式かどうかをチェックする方法がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1336/1814)
回答No.3

>エラーがになる~ 自分、最初から言ってる通りGASには詳しくないので、JSとの細かい差異までは分かりません。 それを踏まえた上で…ざっと見た感じ、メッセージを表示させた後で exit() で強制終了する様な記述になってると思いますが。エラー云々と言うのがその強制終了の事を言ってるのであれば正しく動作しているとしか。 GASは預かり知りませんが、一般的にJS系スクリプトで exit() を実行したらその瞬間にプログラム強制停止という意味です。その後に処理が残っていても無視して止まります。 単に関数を抜けてメインルーチンへ戻すだけなら、return を使います。でもそれだと「無効な日付」が2つ以上存在する場合、最初の1ヶ所目で処理を中断してしまう事になるので… function fchk () { var temp_arr = [], cnt, v, h; for ( var i=3; i<=100; i++ ) { v = sheet1.getRange(i,7).getValue(); h = sheet1.getRange(i,8).getValue(); if ( v && h && !my_date_checker(h) ){ temp_arr[i] = i; } } cnt = temp_arr.length; if ( 0 < cnt ) { Browser.msgBox( 'found '+cnt+' errors.\\n- '+temp_arr.join(', ') ); } else { Browser.msgBox( 'all correct, no problem!' ); } return; } ~以上の様な感じで、無効な値があってもとりあえず全てのシートを最後までチェックして、無効値を見つけた場合は一時的に配列内へ格納して置き、全ての行列チェックが終わってから最終結果を出力する様にした方が良いのかな? よく分かりませんが、例文中の i てのはシート内での行番号みたいなモノなんですよね?

その他の回答 (2)

  • 4017B
  • ベストアンサー率73% (1336/1814)
回答No.2

とりあえず以下の様な感じで「正誤判定(TRUE/FALSE)」が可能なはず。 var my_str = '2018/04/31'; var re = my_date_checker(my_str); alert( re ); // false function my_date_checker(str){ str = str.split('/',3); var y = str[0], m = str[1]-1, d = str[2]; var my_date = new Date(y,m,d); if ( y==my_date.getFullYear() && m==my_date.getMonth() && d==my_date.getDate() ) { return true; } else { return false; } } P.S. 渡される文字列が必ず「yy/mm/dd」の形式になっている事が前提。誤った書式のチェックはしていませんのであしからず…

wansm
質問者

お礼

大変丁寧な回答ありがとうございます。 早速、検証したいと思います。 本当にありがとうございました。

wansm
質問者

補足

回答ありがとうございました。 最後に少しお聞きしたいのですが 下記のような処理で無効な日付が入力されていた場合 functionを抜けたいのですが、exitではエラーになるのですが どのようにしたら抜けるのでしょうか? function fchk () { for (var i=3; i<=100;i++) { var value = sheet1.getRange(i,7).getValue(); var hizuke = sheet1.getRange(i,8).getValue(); if(value==true && hizuke!="" ) { var re = my_date_checker(hizuke) if (re==false){ Browser.msgBox("無効な日付が入力されています") exit()   } } } } 申し訳ありません、よろしくお願いします。

  • 4017B
  • ベストアンサー率73% (1336/1814)
回答No.1

恐らく GoogleAppsScript での操作の事を言ってるのだと思いますが、自分あんまりGASは触った事が無いので…参考になりそうなweb記事を紹介するに留めておきます。 - 参考リンク: Javascriptでの日付チェック https://parashuto.com/rriver/development/validate-date-using-vanilla-js 一般的なブラウザで使用されるJavascriptと記述式や関数文法が同じなら、上記web記事で解説されている手法で問題無く正誤を判定出来ると思います。 正誤判定する日付を自力で各年月日に分離させる必要がありますが…それくらいは分かりますよね…?

wansm
質問者

補足

回答ありがとうございます。 実際試してみましたが y=2018 m=4 d=31 の場合、 m=4 month=4となり結果、有効な日付になってしまいます。 また2018/04/31とスプレッドシートで入力されて内容を 年、月、日に分離するコードを教えて頂けないでしょうか。 どうぞよろしくお願いします。