シートにあるN日以前の行を自動的に削除するGoogle Apps Scriptです。シートにログを出力していると肥大化しがちなので作りました。
特にありません。今お使いのスプレッドシートに組み込めます。
スクリプトの「事前設定エリア」を編集します。下記項目をご自身の環境にあわせて書き換えてください。
書き換えて保存したら、関数「onOpen」を一度実行して権限の承認をしてください。
A列に日時を入れたサンプルファイルを用意しました。
7日分のログを残す設定で、この記事を書いているのは4/29なので・・・4/22以降のログだけ残るはずです。
実際はトリガーで実行しますが、確認のため手動で実行してみます。
上のメニューにある「スクリプト実行」から「N日以上前の行を削除する」を実行します。
想定通り4/22のログが一番上に来ました。問題なさそうです。
手動で実行してもよいのですが、トリガーで定期的に実行してしまいましょう。
不要な行の削除なので、デイリーで夜間に実行すればよいと思います。
このスクリプトは日時が昇順(下のほうが日付が新しい)で並んでいることが前提です。内部では日付(YYYYMMDD)に変換してから判定しているので日をまたがない程度に前後するのは問題ないはずです。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00075/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
// UIの取得
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('N日以上前の行を削除する', 'delete_old_records');
// メニューを画面に追加する
menu.addToUi();
}
function delete_old_records() {
//////////////// 事前設定エリア ここから /////////////////
// 対象のスプレッドシートを指定
const ss_url = 'https://docs.google.com/spreadsheets/d/*********************';
// ログが書き込まれているシート名を指定
const sheet_name = 'ログ';
// 日時がどの列に入っているかを指定(A列なら1)
const date_column = 1;
// ログが何行目から書き込まれているかを指定(2行目から書き込まれていれば2)
const offset = 2;
// 何日分のログを残したいかを指定
const need_days = 7;
//////////////// 事前設定エリア ここまで /////////////////
// スプレッドシートを開く。トリガーで動作させたいのでID or URLで開く
const ss = SpreadsheetApp.openByUrl(ss_url);
// ログが書き込まれているシートを開く
const sheet = ss.getSheetByName(sheet_name);
// ログをすべて取得する
const values = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
// need_daysより前のログは不要なので、その日付を設定する
let date_ago = new Date();
date_ago.setDate(date_ago.getDate() - need_days);
date_ago = Utilities.formatDate(date_ago, 'JST', 'yyyyMMdd'); //比較に使用するためYYYYMMDD形式にする
// 最終的に何行消すのかを格納する変数
let delete_rows_counter = 0;
// ログを1行ずつチェックする
for (let i = offset - 1; i < values.length; i++) { //オフセットで指定された行(0スタートなので-1)は飛ばす
// 比較するためにyyyyMMdd形式に揃える
let date_log = Utilities.formatDate(new Date(values[i][date_column - 1]), 'JST', 'yyyyMMdd'); //ログの日付
// N日前より以前のログであれば、カウンタを加算する
if (date_log < date_ago) {
delete_rows_counter++;
}
}
// カウンタが1以上であれば、行の削除を実行する
if (delete_rows_counter > 0) {
sheet.deleteRows(offset, delete_rows_counter);
}
}
スプレッドシートに入力した値を元に、カレンダーの予定をまとめて作成することができるGoogle Apps Scriptです。
件名に特定の文字列が含まれるメールを、スプレッドシートに転記するGoogle Apps Scriptです。フォームで受け付けたい・・けどメールでも受付せざるを得ない・・という時などに。
シートにあるN日より前の行を、別のシートに退避するGoogle Apps Scriptです。データベース代わりに使っているシートが重くならないよう予防的にデータ退避をしたいときにどうぞ。