[Google Apps Script] Googleスプレッドシートを開いた時に、今日の入力セルへ自動ジャンプ

Googleスプレッドシートで、毎日データを記入しているものがある場合に、スプレッドシートを開いた時に、自動的にその日の入力セルにジャンプしてくれると便利です。

googleスプレッドシート 今日の入力セルへ自動ジャンプ

スクリプト

googleスプレッドシートの “ツール” → “スクリプトエディタ” で、以下のスクリプトを貼り付けます。

日付列(または、シートの全データ)を配列に読み込み、今日の日付と同じ行を調べ、その行と指定された列番号のセルに移動させています。
(配列に読み込まず、セルをの一つづつ調べていくと、処理がかなり遅くなってしまいます。)
日付列は、日付データであれば、シート上の表示形式は違っていても大丈夫です。


// onOpen関数はスプレッドシートが開けられる度に自動的に実行される
function onOpen() {
  goToTodayCell(1,3); // 日付列番号 A列が1 ジャンプさせるカラム番号 C
}

function goToTodayCell(dateColNo, jumpColNo ) {
  //var dateColNo = 1;   // 日付列番号 A列が1
  //var jumpColNo = 3;  // ジャンプさせるカラム番号 A列が1

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  sheet.getRange(1,1).setBackgroundColor("red");

  var maxRow = sheet.getMaxRows();//最終行を取得

  var values;
  if(false){
    values = sheet.getDataRange.getValues(); //データを配列に格納 (全データ)
  } else {
    values = sheet.getRange(1, dateColNo , maxRow).getValues();  // 対象絡カラムのみを配列に格納
  }

  var today = new Date();
  var stringToday = yyyymmdd(today);

  var matchRow = maxRow; // マッチする行が無かったら最終行へ

  for (var i = 1; i < maxRow; i++) {
    var dateValue = yyyymmdd(values[i][dateColNo-1]);
    if(stringToday == dateValue){
      matchRow = i+1; // 配列は 0から、シートは1から
    }
  }
  sheet.getRange(matchRow, jumpColNo).activate();  // セルへ移動
  sheet.getRange(1,1).setBackgroundColor("white");
  return;
}

// dateを日付のみにする
// Mon Jan 21 2013 13:37:00 GMT+0900 (JST)  ->  2012/07/05
function yyyymmdd(dateVal)
{
  var stringDate
  var date = new Date(dateVal);
  if(date.toString() == 'Invalid Date'){  //日付データでない
    stringDate = date;
  } else {
    stringDate = date.getFullYear() + "/" + ("0" + (date.getMonth()+1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2);
  }
  return stringDate;
}

トリガー設定

スプレッドシートを開いた時に onOpen() が呼ばれるようにトリガーを設定します。

”スクリプトエディタ”の”現在のプロジェクのトリガ(時計マーク)”をクリックし、下図のように
実行 → “onOpen”
イベント → “スプレッドシートから” “起動時”
を設定し、”保存” をクリックし保存します。

google apps script トリガー

↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

スポンサーリンク

[Google Apps Script] Googleスプレッドシートを開いた時に、今日の入力セルへ自動ジャンプ」への2件のフィードバック

  1. shun

    上記の通りやっているのですが、エラーになってしまいます。
    エラーの内容は以下のとおりです。
    TypeError: オブジェクト で関数 getFullYear が見つかりません。

    そこで「// dateを日付のみにする」から下行すべてを削除し、
    再度実行すると、以下のエラーが表示されます。
    ReferenceError: 「yyyymmdd」が定義されていません。
    なにか原因はわかりますか?
    ご教授いただけますと幸いです。

    返信
    1. kanrinin 投稿作成者

      コードに不備があるようでした。
      現在動いているものと差し替えてみました。
      再度、試していただけますでしょうか。
      よろしくお願いします。

      返信