Edited at

めんどくさい業務を自動化したGAS


意外と全く同じことをやりたい人がいるんじゃないだろうか?

って思って書いてます。

コピペで使うといいと思うよ。


めんどくさい業務の内容

テンプレートで用意しているシートを別のスプレットシートにコピーをする作業があった。

問題はスプレットシートが20枚あり、これが週に1回のペースでやってくるので非常にストレスである。

(1コピー1分だとして20分間も超単純作業を週1ペースでやるのが苦痛。)


成果物(サンプル)


function sub(){
//スプレットシートのID
var ids = [
"id_1",
"id_2"
]
ids.forEach(function(id){
copy_nisshi(id);
});
}

function copy_nisshi(id) {
var source = SpreadsheetApp.getActiveSpreadsheet();
var sheet = source.getSheets()[0];
var destination = SpreadsheetApp.openById(id);
var copy_sheet = sheet.copyTo(destination);

var ss_name = make_ss_name();
copy_sheet.setName(ss_name);

SpreadsheetApp.setActiveSpreadsheet(destination);
var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var objSheet = objSpreadsheet.getSheetByName(ss_name);
SpreadsheetApp.setActiveSheet(objSheet);

SpreadsheetApp.getActiveSpreadsheet().moveActiveSheet(1);
}

function make_ss_name(){
//1909/09-09/13
var today = new Date();
var lastDay = new Date();
lastDay.setDate(lastDay.getDate() + 4);
return (
('00' + today.getFullYear()).slice(-2)
+ ('00' + (today.getMonth() + 1)).slice(-2)
+ "/"
+ ('00' + today.getDate()).slice(-2)
+ "-"
+ ('00' + (lastDay.getMonth() + 1)).slice(-2)
+ "/"
+ ('00' + lastDay.getDate()).slice(-2)
);
}

上記を週1でクローンで動かせばOK


改善すべき点

・make_ss_nameは1度だけ実行し、生成した値をcopy_nisshiに渡すようにしたほうが効率が良い。

・その他いろいろ。


どんな動作をするか。

1.現在アクティブなスプレットシートの左端にあるシートをコピーし、idのスプレットシートにコピーします。

2.シートの名前を変更します。

3.コピー先のスプレットシートをアクティブにします。

4.コピーしたシートを左端に持っていきます。

5.1に戻ります。(idsに入っている分だけ繰り返します。)


疑問点

シート移動ってアクティブシート切り替えないと出来ないんだろうか?


終わりに

まぁ、ただ便利に使おうってだけのコードなので改善することは無さそうです。

世にいるめんどくさいだけの仕事をしている人の手助けになればなぁとか思いました。

終わり。