エクセルのマクロは今まで使ったことがあったのですが、Googleスプレッドシートで同じような動作をしたいという要望があったので、Google Apps Scriptを使ってみました。
何がしたかったかというと、別のスプレッドシート内容の一部をコピーするという動作です。
そんなに難しくない動作です。
Google Apps Scriptを使えるようにする
Google Apps Scriptというのは、Googleスプレッドシートのみでなくいろんなツールと連携できる便利なもので、javascriptです。
なので、web制作している人にはとっつきやすいと思います。
実際に触ってみて、エクセルのマクロに書き方が似ているなと思う部分もありました。
まずは、Google Apps Scriptを使えるようにします。
マイドライブの「新規」-「その他」-「アプリの追加」をクリックします。
「+接続」をクリックします。※キャプチャ取り忘れました。
そうすると、「Google Apps Script」が使用できるようになります。
マイドライブの「新規」-「その他」-「Google Apps Script」が追加されたのがわかります。
▲ 目次に戻る
Googleスプレッドシートからマクロを記述
動かしたいGoogleスプレッドシート上で「ツール」-「スクリプトエディタ」をクリックします。
そうするとGoogle Apps Scriptが起動するので、任意のプロジェクトとファイル名をつけます。
書いた内容は下記です。
function copyCell() {
// 入力画面作成
var target=Browser.inputBox("対象月入力画面","対象月をYYYY/MM形式で入力してください",Browser.Buttons.OK_CANCEL);
// 現在のスプレッドシートを取得
var ss_copyTo = SpreadsheetApp.getActiveSpreadsheet();
// 現在のシートを取得
var sheet_copyTo = ss_copyTo.getActiveSheet();
// コピー元のスプレッドシートを取得
var ss_copyFrom = SpreadsheetApp.openById('スプレッドシートIDを明記');
// コピー元のシートを取得
var sheet_copyFrom = ss_copyFrom.getSheetByName('schedule');
// 繰り返し i:コピー元の行カウント j:コピー先の行カウント
var j = 2;
var lastRow = sheet_copyFrom.getLastRow();
for(var i = 2; i <= lastRow; i++) {
var matchText = sheet_copyFrom.getRange(i, 3).getValue();
if(matchText) {
// 日付の形式を変更
var textFormat = Utilities.formatDate(matchText, "JST", "yyyy/MM/dd (E) HH:mm:ss Z");
// 入力した日付と合致する作業終了予定の行のみコピー
if(textFormat.indexOf(target) != -1){
sheet_copyTo.getRange(j, 1).setValue(sheet_copyFrom.getRange(i, 1).getValue());
sheet_copyTo.getRange(j, 2).setValue(sheet_copyFrom.getRange(i, 4).getValue());
j++;
}
}
}
}
スプレッドシートIDを明記と書いてあるところには、ご自身のコピー元スプレッドIDを明記してください。
スプレッドIDはスプレッドシードを開いたときのURLの下記部分になります。
https://docs.google.com/spreadsheets/d/スプレッドID/edit
シート名はスプレッドシートタブのシート名を記述してください。
getRange(行番号, 列番号)となるので、適宜コピーしたいセル番号に変えるだけでOKです。
「ツール」-「マクロ」-「インポート」をクリックしてマクロ処理をインポートします。
「ツール」-「マクロ」-「copyCell」をクリックするとマクロ実行できます。
Google Apps Script(GAS)でできることが多そうなので、今後使い倒せるようになったら仕事が楽になりそうです。
▲ 目次に戻る