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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Google Apps Script

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

Q&A

2回答

1397閲覧

入力したセルの値を自動で消す

y373s

総合スコア5

Google Apps Script

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

0グッド

0クリップ

投稿2020/02/14 14:52

例えば、a1セルに値を入力して1分後に値を自動で削除出来るようにしたいです。

方法があれば教えて下さい。

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

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

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

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

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

guest

回答2

0

javascript

1const q241406_onEdit = (e) => { 2 if(!e.value) return; 3 const ctrlSheet = "Control"; 4 const range = e.range; 5 const sheetName = range.getSheet().getName(); 6 if(sheetName === ctrlSheet) return; 7 const a1Notation = range.getA1Notation(); 8 const now = new Date(); 9 const expires = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(),now.getMinutes()+1, 0); 10 SpreadsheetApp.getActive().getSheetByName(ctrlSheet).appendRow([expires, sheetName, a1Notation]); 11} 12const q241406_every1Minutes = (e) => { 13 const ctrlSheet = "Control"; 14 const now = new Date(e.year, e.month - 1, e.date, e.hour, e.minute, e.second); 15 const book = SpreadsheetApp.getActive(); 16 const sheet = book.getSheetByName(ctrlSheet); 17 const lists = sheet.getDataRange().getValues(); 18 sheet.clear(); 19 const next = list.filter(e=>e[0] > now); 20 const dels = list.filter(e=>e[0] <= now).reduce((a,c) => Object.assign(a,{[c[1]]:(a[c[1]] || []).concat(c[2])}),{}); 21 if(next.length > 0) { sheet.getRang(1,1,next.length,3).setValues(next);} 22 Object.entries(dels).forEach(e => { 23 const s = book.getSheetByName(e[0]); 24 e[1].forEach(f=>s.getRange(f).clearContent()); 25 }); 26}

仕様がわかりませんが、書き込み頻度が毎分 1 回以上となり、任意のシートおよびセルを消す必要があるとすると、編集時トリガーで管理用シートに期限切れの時刻とシート、セルを記録し、毎分のトリガーで動作する関数で消すのがよいのではないでしょうか。
スクリプトのプロパティはキーも値も文字列のオブジェクトとなるので例えば分で丸めを考えたときに、キーを期限切れ時刻とすると重複しかねないですし、かといって値をほうを配列にしていくのもコーディング的につらいものがあります。ランダムなキー(UUIDなど)でつくるとしても、やはり値が文字列なので時刻を持たせたりパースするのがやっかいですし、随時追加削除することも考えると、シートでいいんじゃないかなと思います。

消す行為が単発であるとか、セルが固定しているのならトリガーの after が○分後の用途には適すると思います(一度しか発動しないので、トリガーを消す必要もないです)

投稿2020/02/17 14:37

papinianus

総合スコア12705

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

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

0

トリガーとスクリプトプロパティ、onEditイベントを使って実現できます。

予め、トリガーでonEditを編集時に実行するよう仕込んで於いて、
あとは、トリガーを作る関数、特定のトリガーを削除する関数、セルをクリアする関数を用意し、トリガー設置時には、セルをクリアする関数を指定し、1分後に指定すれば良しです。

参考:Google Apps Scriptでトリガーを活用しよう

投稿2020/02/15 01:59

officeforest

総合スコア412

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問