こんにちは、ねこです。
最近スプシばかりいじっているので暇さえあれば(無くても)スクリプトで自動化したがります。
今回はいろんなスプシで使いまわしてるスクリプトのうちのひとつ、「定期的にシートをコピーして先頭に持ってくるスクリプト」を紹介します。
「毎日じゃなくてそんなに手順あるわけじゃないんだけど誰かが定期的にやらないといけないやつ」を自動化しました。
こういうの、ふとした瞬間に面倒くささを感じるんですよね。
そんなモヤッとはコピペスクリプトに任せてしまいましょう。
スクリプトがやってくれること
毎週月曜日に↓の処理を実行してくれます。
speakerdeck.com
導入するときの反応
毎回シートを作ってくれる人に自動化していい?と聞いてみました。 とっても嬉しそうですね!やりましょう!!
準備するもの
シート名等に日付を使うのでライブラリにMoment.jsを追加します。
tonari-it.com
実際のスクリプト
function copyNextSprintSheet() { var SS = SpreadsheetApp.getActiveSpreadsheet(); var sheets = SS.getSheets(); // コピー元(先頭)のシート var sourceSheet = sheets[0]; // コピー後のシート名を作る var openDate = Moment.moment(); var closeDate = Moment.moment().add(4, 'days'); var nextSheetName = '入力シート_' + openDate.format('MMDD') + '-' + closeDate.format('MMDD'); if (SS.getSheetByName(nextSheetName) != null) { // すでに作られていたらなにもしない return; } // ① シートをコピー sourceSheet.copyTo(SS); // ② 「(コピー元シート名) のコピー」というシート名になっているのでコピー後のシート名にする var sourceSheetName = sourceSheet.getName(); var copiedSheet = SS.getSheetByName(sourceSheetName + ' のコピー'); copiedSheet.setName(nextSheetName); // ③ 書式はそのままに中身をクリア var areaLastRow = SS.getRange('B:B').getLastRow(); // メンバー列(B列)の最後の行を取得する copiedSheet.getRange('D6:J' + areaLastRow).clear({contentsOnly: true}); // ④ D4セル(day1)に開始日を挿入 copiedSheet.getRange('D4').setValue(openDate.format('YYYY/MM/DD')); // ⑤ コピー後のシートを一番初めの位置に移動する SS.setActiveSheet(copiedSheet); SS.moveActiveSheet(1); }
定期実行の設定
スクリプトを保存したら「編集」>「現在のプロジェクトのトリガー」>「トリガーの追加」で毎週月曜日に上記のスクリプトを実行するように設定します。
これで毎週月曜日にシートをコピーしてくれる人の手間が消えました。やったね!
みなさんもGASをうまく使って良きスプシライフを!
こんな感じでスプシをゴリゴリ使いまくるわたしたちは
\\『明日のはたらくを創る』仲間を募集中です!! //
919.jp