Google Spreadsheetの日付の古いデータをScriptで消去する | e-子育て.comのスタッフブログ~子育て、教育のヒントをお届け~

e-子育て.comのスタッフブログ~子育て、教育のヒントをお届け~

10歳までの子育て応援サイトe-子育て.comが子育てや教育のヒントをお届け!
長年小学生に学習指導した経験を皆さんにお伝えしたくて、小学生の勉強の悩みや家庭学習、集中力・やる気スイッチの入れ方等書いています。
ブログの内容を実践して子ども2人が東大卒業しました。

毎日ユーザーが登録して更新される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);

そのセルのある行を削除
};

 

以上

 

いずれ、シートが開かれるイベントで古いデータを自動的に消したら良さそうなので、やってみたい。(羊)