プロフィール

 twitter:taisei117
 scrapbox:大成道

2020/09/26

200926:googlespreadsheetで今日の日付に移動する関数を作成

 googlespreadsheetで今日の日付に移動する関数を作成


予定管理、実績記録用にgooglespreadsheetで、自作システム手帳のようなものを作っている


googleカレンダーなどのカレンダーアプリは予定の一覧性が低く、苦手

1日に複数の用事があると、途端にわかりにくくなる


システム手帳も、枠のついたメモ帳と考えれば、excel系の表計算アプリでも似たようなことはできるはず


システム手帳にも汎用性が求められているので、汎用性の面でいえば表計算アプリはかなり柔軟


天気予報をAPIで自動記録したりもしている。かなり便利。1年前の日記と天気を比較したりもできて面白く使っている


しかし、spreadsheetの立ち上げ時に、毎回今日の日付まで移動するのが面倒に感じていたため、今回自動化した

setActiveSelectionという機能を使うと実現できた

もともと、天気予報の自動貼り付け機能で、本日のセルを選択する部分は作ってあり、正常に動作することも確認していたので、実装は比較的楽(15分ぐらいでできた?)だった




これと同様のことを実施したかった


参考:特定のセルへ移動するスクリプト

https://groups.google.com/g/google-apps-api-japan/c/unoRCEI5lRo?pli=1

Image from Gyazo

https://gyazo.com/f938ff16803b9e8a904048ac3213046c




Image from Gyazo

https://gyazo.com/c65809bbbc8bcd7bbb230ae2292d9c54




実行したときの様子


立ち上げ後、4~5秒後に今月のシートの今日の日付に移動している


意外と今日の日付に移動する手間がある

手帳も、今日のページを探すのが面倒だったりする


毎日繰り返す、細かい作業を自動化すると、想像以上に自由になる感じがするのでお勧め


Image from Gyazo

https://gyazo.com/b6e1b644007271f4f61d8cf75c383f14



関数のコードそのまま張り付け

Image from Gyazo


https://gyazo.com/c3c4cbf64db6719dcd08c06414e6f930

function startTodayActive(){

  //各月の予定シート関係の定数

  var dateRow = 1;//各月の予定シートの日付の記載されている行、1行目に記載されているはず

  var dateColumn = 9;//各月の予定シートの日付の記載されている列、9列目(I列)に記載されているはず

  var scheduleRow = 2;//各月の予定シートの日毎の予定の記載されている行、2行目に記載されているはず

  

  var now = new Date();//現在時刻、日付の取得

  var now_yyMM =Utilities.formatDate(now, "JST", "yyMM");//現在時刻を年月の書式に変更

  Logger.log(now);//確認用

  Logger.log(now_yyMM); 

  

  var thisMonthSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(now_yyMM);//伊勢Todoの今月シートを取得

  var firstDayOfThisMonth = thisMonthSheet.getRange(dateRow,dateColumn);//1行9列目が当月一日の日付が入力されたセル、シートの書式を変更した場合は修正が必要

  var dateFirstDay = firstDayOfThisMonth.getValue();

  Logger.log(dateFirstDay);  

  

  if(now_yyMM == Utilities.formatDate(dateFirstDay, "JST", "yyMM") ){//念のため、yyMMタブの月初めのセルの内容を確認、当月一日なら実行

    Logger.log('今月であることを確認しました');

    var column_today = Utilities.formatDate(now, "JST", "dd")-1;

    Logger.log(column_today);

    

    var todayOfThisMonth = thisMonthSheet.getRange(scheduleRow,dateColumn+column_today);//当日予定セルの範囲取得

    thisMonthSheet.setActiveSelection(todayOfThisMonth);

  }

}


0 件のコメント:

コメントを投稿