質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

解決済

GASにて、事前に記入した日にチェックが入り、特定セルに記入が無ければメールで通知するようにしたい。

madarakko
madarakko

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1回答

0評価

1クリップ

278閲覧

投稿2022/07/20 06:31

前提

公開されている備品管理のGASを活用させて頂いています。
B列の指定の日・特定の時間までにスマホでQRコードを読み込んでいるかを判定し、読み込んでいなければメールで通知が飛ぶようにしたいです。

実現したいこと

例えばB3で、時間が8時45分あれば、7/19の8時45分にそのチェックが動き、Eに記入がなければメール通知が飛ぶ、といった形をイメージしています。

イメージ説明

定期的な通知であればトリガーで出来そうだったのですが、日付が毎月変わる必要があり、そちらの作り方がわからない状況です。

チェックの時間は8時45分固定で良いのですが、以下のソースコードにどのように追加をして行けば上手くB列の日にちとE列の記入有無判定できるでしょうか。

どうぞよろしくお願い致します。

該当のソースコード

ソースコード function bihinlabel(){ var sht = SpreadsheetApp.getActive().getSheetByName('備品'); var lastRow = sht.getLastRow(); for (var i=3; i<=lastRow; i++) { sht.getRange(i, 3).clear(); sht.getRange(i, 4).clear(); var qrc1 = '=\"https://script.google.com/macros/s/\"&$B$1&\"/exec?no=\"&A' + i; var qrc2 = '=image(\"https://chart.apis.google.com/chart?chs=250x250&cht=qr&chl=\"&C' + i +')'; sht.getRange(i, 3).setValue(qrc1); sht.getRange(i, 4).setValue(qrc2); } }
コード function doGet(e) { var no = e.parameter.no; var datetime = new Date(); var today = Utilities.formatDate(datetime,'JST', 'yyyy/MM/dd'); var userid = Session.getActiveUser().getEmail(); var sht = SpreadsheetApp.getActive(); var lastRow = sht.getLastRow(); const values = sht.getRange(3, 1, lastRow - 2).getValues().flat(); var r = values.indexOf(no) + 3; sht.getRange(r, 5).setValue(datetime); sht.getRange(r, 6).setValue(userid); return ContentService.createTextOutput(today + "\n" + sht.getRange(r, 2).getValue() + "\n" + userid); }

試したこと

定期的な通知であればトリガーで出来そうだったのですが、日付が毎月変わる必要があり、そちらの作り方がわからない状況です。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

qnoir

2022/07/20 11:57 編集

・要件でいくつか不明な点があります。 ①「Eに記入がなければメール通知が飛ぶ」ということだが、具体的に、どの宛先に対してどのような内容の通知メールを送るのか。 a. あて先は固定[たとえば管理者]なのか、それとも状況ごとに異なる送信先なのか。 b..通知すべき行が複数ある場合、複数まとめて送信するのか、個別に送信するのか。 ②画像ではB列に月と日しか記載されていないように見えるが、年は内部で持っていて実際は内部で持っている年と合わせて年月日で判断するのか? それとも年は持っているが無視してよく「当年の」月/日で判断するのか。 それともB列は文字列書式であり、「当年の」月/日で判断するのか。 例) a、B列は書式なしテキストで「7月9日」という文字であり、年を持っていない。 2022年の7月9日にチェックを行う。 2023年になったら2023年のの7月9日にもチェックを行う。 2024年になったら2024年の7月9日にもチェックを行う。 b、B列の書式は日付であり「7月9日」という表示であるが、内部では「2022年」という年を持っている。 b-1:チェックを行うのは、2022年の7月9日だけである。(年月日で判断) b-2:内部で持っている年は無視し、2023年以降毎年の7月9日にもチェックを行う。 ③チェックするのは、 [a]B列が当日の月日となっている行だけでよいのか。 それとも [b]当日以前の月日となっている行すべてをチェックする必要があるのか。 例) 7月29日と7月31日の2行あり、いずれもE列が空欄状態であるとする。 チェック日時を7月31日の8時45分とする。 [a]ならば、7月31日の行についてのみ通知すればよい。 [b]ならば、7月31日以前、すなわち7月29日と7月31日の両方通知する必要がある。 ④確認時刻を経過したあとに、その日以前を確認日とするデータが追記されるような場合はありえるのか? 例)「チェック時刻を7月31日の8:45とする。 7月31日の8:45時点では、データとして7月29日の1行しかなく、かつその行はE列にメールアドレスが入力済みの状態であったので、チェックの時点では通知する必要はない。 しかし、同じ日(7月31日の)10:00に、「7月31日」と「7月30日」の行が追加された」 というようなシチュエーションはありえるのか。
madarakko

2022/07/20 20:37

ご返信ありがとうございます。 ご不明な点ですが、 ①「Eに記入がなければメール通知が飛ぶ」ということだが、具体的に、どの宛先に対してどのような内容の通知メールを送るのか。 a. あて先は固定[たとえば管理者]なのか、それとも状況ごとに異なる送信先なのか。 ⇒宛先は固定で、1つのメールアドレスに飛ばしたいです。 b..通知すべき行が複数ある場合、複数まとめて送信するのか、個別に送信するのか。 ⇒「当日」入力が無かったものを通知したいので、当日の1件のみ送信したいです。 ②画像ではB列に月と日しか記載されていないように見えるが、年は内部で持っていて実際は内部で持っている年と合わせて年月日で判断するのか? それとも年は持っているが無視してよく「当年の」月/日で判断するのか。 それともB列は文字列書式であり、「当年の」月/日で判断するのか。 ⇒こちらはb-1の「年は持っているが無視してよく「当年の」月/日で判断する」です。 ③チェックするのは、 [a]B列が当日の月日となっている行だけでよいのか。 それとも [b]当日以前の月日となっている行すべてをチェックする必要があるのか。 ⇒[a]です。その当日だけで大丈夫です。他の日付は事前に入力しているだけのイメージです。 ④確認時刻を経過したあとに、その日以前を確認日とするデータが追記されるような場合はありえるのか? 例)「チェック時刻を7月31日の8:45とする。 7月31日の8:45時点では、データとして7月29日の1行しかなく、かつその行はE列にメールアドレスが入力済みの状態であったので、チェックの時点では通知する必要はない。 しかし、同じ日(7月31日の)10:00に、「7月31日」と「7月30日」の行が追加された」 というようなシチュエーションはありえるのか。 ⇒これはありません。抜け漏れチェックのイメージですので、可能性として7月31日の7:00に7月31日と入力され、8:45にチェックが走る可能性はありますが、ここは特別準備をしなくても良い部分かと思われます。 どうぞよろしくお願い致します。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。