毎日ユーザーが登録して更新されるGoogle Spreadsheetがあります。
参照したいのは常に今日の日付なので、古いデータは手動で消しています。
対象日の古いものを範囲選択して、行削除コマンドにて。
でも、それって面倒ですよね。
日付が変わったら自動的に削除したいところなのですが、取りあえずはボタン一発で古い行が消えるマクロがあったら便利です。
そこでGAS(Google App Script)を使って、対象日を判定して古かったら消すScriptを書きました。
初めてのGASなので、あちこち検索しながら見よう見まねで。
多少失敗がありましたが、デバッグした結果うまく動作しました。
その覚書をここに残しておきます。
赤字の部分は、そのシートがある環境によって変わる部分で、青字はユーザーが任意に決められる部分。
function deleteRows() {
var sd = SpreadsheetApp.getActiveSpreadsheet();
var d = sd.getSheetByName('日付');
var dd = sd.getRange("A1")
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('フォームの回答 2');
var r = s.getRange('C:C');
var v = r.getValues();
for(var i=v.length-1;i>=0;i--)
if(v[0,i]<dd)
s.deleteRow(i+1);
};
説明
function deleteRows() {
スクリプト名は任意
var sd = SpreadsheetApp.getActiveSpreadsheet();
アクティブなシートのID番号を得て変数sdへ
var d = sd.getSheetByName('日付');
日付シートの指定を変数rへ
var dd = sd.getRange("A1")
日付シートのA1セル(A1セルにはtoday()関数があり今日の日付を指す)を読み込み変数ddへ
var ss = SpreadsheetApp.getActiveSpreadsheet();
先ほどと同じで不要だが、別ブックのこともありうるので残しておく
var s = ss.getSheetByName('フォームの回答 2');
フォームの回答2のシート指定を変数sに
var r = s.getRange('C:C');
フォームの回答2のシートのC列を範囲指定し変数rへ
var v = r.getValues();
指定した範囲から値を得て変数vへ
for(var i=v.length-1;i>=0;i--)
列の範囲を繰り返し
if(v[0,i]<dd)
もし、値が今日の日付より小さければ、つまり古いデータなら
s.deleteRow(i+1);
そのセルのある行を削除
};
以上
いずれ、シートが開かれるイベントで古いデータを自動的に消したら良さそうなので、やってみたい。(羊)