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

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

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

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

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

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

Q&A

1回答

1387閲覧

【GAS】時間差で実行している処理を条件を付けて処理初めからやり直すようにしたい。

Ebisu

総合スコア4

Google スプレッドシート

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

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

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

0グッド

1クリップ

投稿2022/08/26 00:55

編集2022/08/26 04:52

前提

Googleスプレッドシートで特定のセルに入力があった際、
入力後決まった時間が経過するとその入力が消える仕組みを作っています。

実現したいこと

①特定のセルへの入力後、一定時間経過後に削除したい。
②特定のセルへの入力後、一定時間経過する前に新たに入力があったとき、その経過時間をリセットさせたい。

発生している問題・エラーメッセージ

実現したいことの①は実現できていますが、②ができておらず調べても分かりませんでした。
下記コードでは、入力後60秒後にその入力が消えるようにしていますが、
入力して30秒後に新たに入力し直したとき、入力し直したものは30秒後(最初の入力から60秒後)に消えてしまいます。
なので、入力し直したときに処理を最初からやり直すか、前の処理は停止し入力し直したときの処理を優先させたいです。

該当のソースコード

トリガーは、
デプロイ:Head
イベントソース:スプレッドシートから
イベント種類:編集時

今はインストーラブルトリガーなしで下記コードのみで動作しています。

F6(F6:G7まで結合セル)に編集があった際、60秒後に入力が消えるようにしています。

GAS

1function onEdit(e) { 2 const inspection_cell = ['F6', 'G7', 'F6:G7']; 3 const changed_cell = e.range.getA1Notation(); 4 let staySecond = 60; 5 for (var i = 0; i < inspection_cell.length; i++) { 6 if (changed_cell == inspection_cell[i]) { 7 Utilities.sleep(staySecond * 1000) 8 SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート名").getRange(6,6).clearContent(); 9 } 10 } 11}

試したこと

②については調べたのみで具体的にコードを編集し試したことはありません。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2022/08/26 01:29

トリガーを生成、消去してはどうでしょう?
Ebisu

2022/08/26 01:57

具体的にどのようにすればよいでしょうか。
YAmaGNZ

2022/08/26 03:05

更新された時に現時刻から60秒後に動作するトリガーを作成して取り消したい時はそのトリガーを削除するという方法となります。 「GAS トリガ-作成 削除」とでも検索すればスクリプトからトリガーの作成削除の方法が分かるかと思います。
YAmaGNZ

2022/08/26 06:13 編集

ScriptApp.newTrigger('TestFunction').timeBased().at(new Date(1000*60)).create(); とすれば現在時刻の60秒後にTestFunctionという関数を実行するトリガーが作成できますし キャンセルしたい時や実行が終わって必要がなくなったときにdeleteTriggerで削除すればいいでしょう。 トリガーで実行させる関数で特定のセルをクリアすればいいかと思います。
YAmaGNZ

2022/08/26 07:52 編集

動かないというのはonEditではトリガーを作成する権限がないのではないでしょうか? onEditを別名にして、手動でスプレッドシート編集時に動作するトリガーを作成してみてはどうでしょうか https://akizora.tech/gas-onedit-error-3445#onEdit-3
guest

回答1

0


・特定のセルaに入力されたとき、(他のセルが編集されたときは作動しない)
・そのm分後に、
・その特定のセルaに入力された項目をクリアする。
かつ

・特定のセルに入力aがまだ残っている状態で、
・新たに特定のセルaに入力されたとき、
・(最初の入力からm分後ではなく)新たに入力されてからm分後に、
・その特定のセルaに入力された項目をクリアする。
①と②の両立は不可能みたいです。

投稿2022/09/02 08:29

Ebisu

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問