Googleスプレッドシートでカレンダー兼ふりかえりシートをつくる
(最近はダレてきてしまっているが)一日一日を振り返り、点数をつけるというキショ行為をしている。点数を縦軸に、日付を横軸にしてグラフを描いたりしても面白いよなと思っていたので記録にはGoogleスプレッドシートを使っている。シートの雛形を作ってしまえばそれを複製するだけなのだが、日付と曜日を手入力で埋めるのは面倒なので Google Apps Scipt を使ってみた。
自分はプログラミング?を生業にも趣味にもしてないので個人ブログなどを参考にしながらつぎはぎのようにつくったからプログラミングを生業や趣味にしている人からすれば見苦しいかもしれないが、ほんの少しでも誰かの役に立つかもしれないのでここに記しておく。
function insertSheet6Sample() {
var today = new Date();
var day = today.getDate();
if(day == 15){
function getDate(){
var today = new Date();
today.setMonth(today.getMonth() + 1);
// 現在の日時を取得
var out = Utilities.formatDate(today, "JST", "YYYYMM");
// 現在の日時から、月を算出
return out; // yymmという形の文字列を戻り値として返す
}
var today = new Date();
var day = today.getDate();
if(day = 15)
var MyNewSheet = getDate();
var plusone = new Date();
plusone.setMonth(plusone.getMonth() + 1);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var templateSheet = ss.getSheetByName('master');
ss.insertSheet(MyNewSheet, {template: templateSheet});
var out1 = Utilities.formatDate(plusone, "JST", "YYYY");
var out2 = Utilities.formatDate(plusone, "JST", "MM");
var out3 = Utilities.formatDate(plusone, "JST", "dd");
SpreadsheetApp.getActiveSheet().getRange(1,1).setValue(out1+"年");
SpreadsheetApp.getActiveSheet().getRange("B1").setValue(out2+"月");
for(i=1;i<=31;i++){
var KK = out1+"/"+out2+"/"+i
SpreadsheetApp.getActiveSheet().getRange(i+2,1).setValue(KK);}
for(i=3;i<=33;i++){
var K = "=WEEKDAY"+"("+"A"+i+")"
SpreadsheetApp.getActiveSheet().getRange(i,9).setValue(K);}
for(i=3;i<=33;i++){
var KKK = '=IFS(I'+i+'=7,"土",I'+i+'=6,"金",I'+i+'=5,"木",I'+i+'=4,"水",I'+i+'=3,"火",I'+i+'=2,"月",I'+i+'=1,"日")'
SpreadsheetApp.getActiveSheet().getRange(i,2).setValue(KKK);}
for(i=3;i<=33;i++){
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange('B'+i);
if (range.getValue() == "日") {
range.setBackgroundRGB(255, 200, 200);
}
if (range.getValue() == "土") {
range.setBackgroundRGB(200, 200, 255);
}
}
}
}
そもそも Google Apps Script はJavaScriptに似ている(?)ほとんど同じ(?)らしい。
最初のほうでは毎月15日になると"master"シートをコピーした、翌月分のシート(シート名はYYYYMM)をつくるようにという記述になっているが、実際にはトリガーという設定で、いつこれが機能するかをスクリプト外で決めることができるのでif(day == 15)あたりのやつは要らなそうである。
その後、取得した年月日から年と月を特定のセル(それぞれA1、B1)に入力させている。
それからA3からA33にYYYY/MM/ddの形式で翌月の1日から31日までの日付を入力させている。
それから、Googleスプレッドシートにおいて日付を参照して曜日に対応する数字を返す"=WEEKDAY()"をI3からI33に入力させている。
それから、I列の数字に対応して(土~日)を表示するように"IFS(I~~~"をB3からB33に入力させている。
それから、"日"のセルは赤色になるように、"土"のセルは青になるように背景の色を指定している。
masterシートは以下のようなものをつくってある。
昨日が15日なのでその結果つくられた2021年8月のシートが以下のように。
当該スプレッドシートを開いて、ツール>スクリプトエディタ に行ってペーストしてなんやかんやするとそのスプレッドシートでこれが実行されます。
もっとエレガントなやり方があったら教えて下さい。
あと、グラフを自動で作らせるのもやりたい。


コメント
コメントを投稿