入社一年目の佐藤範幸と申します。
去年も書かせていただきましたが、今年もアドベントカレンダーの記事を書かせていただきます。
よろしくお願いいたします。
Googleスプレッドシート、活用してますか?
近頃はなんでもかんでもGoogleに頼ってしまう風潮、ありません?
僕はこの風潮、大好きです。便利なんですよ。
もっと盛り上がってほしい。
盛り上がることで、Googleが提供するサービスが向上してほしい。
この前Google翻訳が進化して、ニューラルネットを活用した翻訳サービスが始まりましたね。
この調子でどんどん便利になってほしいですね。
さて、僕は少し前に新しいPCを買いましたが、性能に予算をかけてしまったせいでMicrosoft Officeを買うことが出来ませんでした。
そんな僕にぴったりのサービス。それが、Googleスプレッドシートです。
Googleスプレッドシートは表計算アプリケーションで、Microsoft Excelのように使うことが出来ます。
「でもマクロ使えないじゃん」
こう思ったIT技術者の皆さんいませんか?
実は同様の機能があるんです。
Google Apps Script
それがこれ、Google Apps Script。
これを使えば、Excelのように簡単なマクロを組むことが出来ます。
主な言語は java script。なじみのある言語ですね。
サーバーサイドのjava script+Google独自の関数を用いて記述していきます。
ちょこっと実践
うろ覚え知識でクイズアプリを作ってみました。
簡素なものですが簡単に作れます。
ソースコードを全部載せます。勉強&作成途中のため汚いですが容赦ください。
ソースコードを全部載せます。勉強&作成途中のため汚いですが容赦ください。
//初期化
function initialize(){
//シート取得
var sheet_m = SpreadsheetApp.getActive().getSheetByName('main');
var sheet_q = SpreadsheetApp.getActive().getSheetByName('question');
var sheet_s = SpreadsheetApp.getActive().getSheetByName('set');
var sheet_l = SpreadsheetApp.getActive().getSheetByName('log');
//setシート
if (sheet_s != null){
SpreadsheetApp.getActiveSpreadsheet().deleteSheet(sheet_s);
}
SpreadsheetApp.getActive().setActiveSheet(sheet_q);
sheet_s = SpreadsheetApp.getActive().duplicateActiveSheet().setName('set');
//値クリア
sheet_m.getRange('A1').setValue('第1問');
sheet_m.getRange('B1').clearContent();
sheet_m.getRange('B2').clearContent();
sheet_m.getRange('B5').setValue(0);
sheet_l.clear();
sheet_l.getRange('A1').setValue('第1問');
SpreadsheetApp.getActive().setActiveSheet(sheet_m);
}
//初期化
function initialize(){
//シート取得
var sheet_m = SpreadsheetApp.getActive().getSheetByName('main');
var sheet_q = SpreadsheetApp.getActive().getSheetByName('question');
var sheet_s = SpreadsheetApp.getActive().getSheetByName('set');
var sheet_l = SpreadsheetApp.getActive().getSheetByName('log');
//setシート
if (sheet_s != null){
SpreadsheetApp.getActiveSpreadsheet().deleteSheet(sheet_s);
}
SpreadsheetApp.getActive().setActiveSheet(sheet_q);
sheet_s = SpreadsheetApp.getActive().duplicateActiveSheet().setName('set');
//値クリア
sheet_m.getRange('A1').setValue('第1問');
sheet_m.getRange('B1').clearContent();
sheet_m.getRange('B2').clearContent();
sheet_m.getRange('B5').setValue(0);
sheet_l.clear();
sheet_l.getRange('A1').setValue('第1問');
SpreadsheetApp.getActive().setActiveSheet(sheet_m);
}
//問題表示
function questionSet(){
//シート取得
var sheet_m = SpreadsheetApp.getActive().getSheetByName('main');
var sheet_s = SpreadsheetApp.getActive().getSheetByName('set');
var sheet_l = SpreadsheetApp.getActive().getSheetByName('log');
//残問題数からランダムに選択
var randomCount = sheet_s.getRange("E3").getValue();
var range = sheet_s.getRange(Math.floor(Math.random()*randomCount),1,1,3);
var values = range.getValues();
//問題表示
var questionCount = sheet_s.getRange("E2").getValue();
sheet_m.getRange(1,2).setValue(values[0][1]);
sheet_l.getRange(questionCount+1,2,1,3).setValues(values);
sheet_l.getRange(questionCount+1,5).setValue(range.getRow());
}
//答え表示
function answerSet(){
//シート取得
var sheet_m = SpreadsheetApp.getActive().getSheetByName('main');
var sheet_s = SpreadsheetApp.getActive().getSheetByName('set');
var sheet_l = SpreadsheetApp.getActive().getSheetByName('log');
var questionCount = sheet_s.getRange("E2").getValue();
var answer = sheet_l.getRange(questionCount+1, 4).getValue();
var answerMsg = 'A:' + answer + '\\n正解しましたか?';
var yes_no = Browser.msgBox(answerMsg,Browser.Buttons.YES_NO);
var rightCount = sheet_m.getRange(5, 2);
var rightCount_v = 0;
if (yes_no == 'yes'){
sheet_l.getRange(questionCount+1, 5).setValue('○');
rightCount_v = rightCount.getValue() +1;
}else if(yes_no == 'no'){
sheet_l.getRange(questionCount+1, 5).setValue('×');
rightCount_v = 2;
};
rightCount.setValue(rightCount_v);
if (rightCount_v == 3){
Browser.msgBox('おめでとう。',Browser.Buttons.OK);
};
}
スプレッドシートだけじゃない
Excelマクロのように使える、Excelの代わりになる、と推してきましたが、Google Apps Script はそれだけじゃありません。
実はGoogleが提供する他のサービスにも使えます。
例えばGoogleフォームに入力したデータをGmailで自動送信したり、フォームで入力したデータをスプレッドシートに連携させてまとめることが出来ます。
そして、これから流行ればより機能が拡張され、できることが増えていくでしょう。
みなさんも是非Google Apps Script を触って見てください。一緒に流行らせましょう。
最後までご覧いただきありがとうございました。
そして、これから流行ればより機能が拡張され、できることが増えていくでしょう。
みなさんも是非Google Apps Script を触って見てください。一緒に流行らせましょう。
最後までご覧いただきありがとうございました。



セキュリティ的なところの不安が払拭できない(運用部分が大きいけど)から踏み切るのが難しいけど、できたらスマートに全てオンラインドキュメントに移行したいね。
返信削除構文をみるとjavascript・・・なのかな?
返信削除なかなかよさそうですね