GAS(Google Apps Script)でGoogleスプレッドシートのマクロ的処理を試みた

超便利!
あるシートの範囲指定でコピーして他のシートのある範囲にペースト
っていうのを約80個のシートに繰り返す、ってのを自動化出来ました。
てか何故そんな事情になってしまったのかは聞かないで下さい…。

Googleスプレッドシートで同じ処理をシートをまたがって約80回ぐらいこなさないとイケない羽目になって…。
エクセルや秀丸で言う所のマクロ?的な処理出来たはずだよなぁ…って調べてみまして。
それが、GAS(Google Apps Script)というものでした。
簡単なスクリプトでGoogleスプレッドシート や Gmail、Calendar などの Google Apps の API を呼び出せるので超便利らしい、ってとこまでは知ってましたが。
いよいよ業務上で。スプレッドシートの数約80個について。
あるシートのある範囲を指定して。それをコピーして。80個のシートの同じ範囲にコピーを繰り返さないといけなくなったのです。
こいつぁてぇーへんだっ!ってことで色々ググりますと。
似たような事やってるスクリプトが散見されましたので。それらを集めて何とかなりました。
シートをまたがったコピーはコピー先のシートに一回コピーしてから削除、などの説もありましたがそんな事なかったね。
下記簡単に書いてみます。
まず、シートの数が全部で何個か…。
これスクリプト書かないでも調べられる方法有りそうですが分からなかったので…。
下記のスクリプトです。
Loggerでシート数を出力します。
その後ログを見ると数値が出力されています。
あ、スクリプトはGoogleスプレッドシートのメニューのツールのスクリプトエディタを開いて書きます。
一応デバッガ?も付いています。

function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var max = sheets.length;
Logger.log(max);
}

上記でシートの数が分かりました。
そして下記のスクリプトで約80回ぐらいコピペを繰り返します。
変数の定義とか何から何まで分かってないので偶然動いただけなので恥ずかしいのですが、まぁいいよね?
# 間違い指摘乞う

function myFunction() {
var ss, sht, sheet, sheet1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
//シートの数
var max = sheets.length;
var sheet ='';
//「シート名hogehoge」の範囲H1:AH42をコピー元とする
var sht = ss.getSheetByName('シート名hogehoge');
var rangeToCopy = sht.getRange("H1:AH42");
//複数シートの作業をループさせる:今回は5番目(0から始まる)のシートから78のシートまで
for(var i = 4; i < 77; i++ ){
sheet1 = sheets[i];
// コピー範囲の値を取得し、対象範囲へ転記
var targetSheet = sheet1;
var targetToCopy = targetSheet.getRange("H1:AH42");
rangeToCopy.copyTo(targetToCopy);
}
}

てな感じです。
他にも各Google Appsサービスのオブジェクト・メソッドが死ぬほど揃っているのでGメールやらカレンダーやら何やらGoogle系のAppsで何かスクリプトめいた事が死ぬほど出来そうです。
が、よく分からずっ!
でわでわ!

コメント

タイトルとURLをコピーしました