エクセルのマクロは今まで使ったことがあったのですが、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の下記部分になります。
getRange(行番号, 列番号)となるので、適宜コピーしたいセル番号に変えるだけでOKです。
「ツール」-「マクロ」-「インポート」をクリックしてマクロ処理をインポートします。
「ツール」-「マクロ」-「copyCell」をクリックするとマクロ実行できます。
Google Apps Script(GAS)でできることが多そうなので、今後使い倒せるようになったら仕事が楽になりそうです。