見出し画像

VBA・マクロ開発経験者がGAS(Google Apps Script)をさわってみる 2

前回はGoogleスプレッドシート・GASでじゃんけんマシンを
作成してみよう、ということで簡単な画面イメージと主機能を
列挙しました。

(前回分はこちら↓)

今回は実際のGASでの操作と、必要機能・コーディング確認を
していきます。

■スプレッドシート・GASの初期作成

 Excelマクロ(VBA)での開発経験から、GASでも同様なアプローチが
 できないかと色々調査してみて、以下の操作や存在がわかりました。

① 拡張機能 AppsScript
② プロジェクトの生成・.gsファイルの生成
③ functionの生成
④ オブジェクトとマクロ(GAS)の紐づけ
 

 大きくわけると①~③ と ④ になりますが、
 GAS側でコードを記述する・function(機能)を作成する部分(①~③)と、
 その作成した機能をシート側の制御に連動させる(④)、という
 流れです。

 ① 拡張機能 AppsScript

メニューバーの「拡張機能」から Apps Script を選択

 ② プロジェクトの生成・.gsファイルの生成
 ③ functionの生成

プロジェクト・.gsファイル・デフォルトのfunctionが自動生成された

 ④ オブジェクトとマクロ(GAS)の紐づけ

オブジェクト上で右クリックするとあらわれる「…」を押下するとリストが出現
「スクリプトを割り当て」で対応するfunctionを指定

 これでオブジェクト(ボタン)を押下した時に、作成したfunctionを
 呼び出す紐付けまでが完成しました。

■必要機能

 それではこのfunctionの中に、実際の機能を作成していきます。
 じゃんけんマシンを動かす上で必要になる機能は以下であると
 考えています。

0.テスト的機能
  ログ
  メッセージ表示
  コメント
1.セル・リストボックス値の取得(ゲッター)
2.セル・リストボックス値へ設定(セッター)
3.ランダム値の取得
4.値の比較と条件分岐

 ※上記の0.はじゃんけんの機能とは関係ありませんが、デバックを
  行ったり動作検証やコード可読性のためにも必要なため列挙しました。
 
 これらの機能を実装するために、以下GASのテスト的コードを
 調査し、その動作検証をしてみます。

 0.テスト的機能

ログ・メッセージボックス表示・コメント
 Logger.log('処理開始');
 Browser.msgBox("じゃんけん開始!")
 //
 /* */

 1.セル・リストボックス値の取得(ゲッター)

セル・リストボックス値の取得(ゲッター)
 //取得した値をメッセージ表示
 Browser.msgBox(SpreadsheetApp.getSheets()[3].getRange("H4").getValue())

 2.セル・リストボックス値へ設定(セッター)

セル・リストボックス値へ設定(セッター)
 //セルへ文言"testtest"をセット
 SpreadsheetApp.getSheets()[3].getRange("H20").setValue("testtest")

 3.ランダム値の取得

let rand = Math.random();

//ログ表示 0-1の間の値をランダムに取得
console.log(rand);
//ログ表示 0-1の間の値に3掛けして小数点切り捨てると0~2の3パターンの値が均一に取れる
console.log(Math.floor( rand * 3)); 

 4.値の比較と条件分岐

let mySelect = SpreadsheetApp.getSheets()[3].getRange("H4").getValue()
let jkSelect = Math.floor( rand * 3)
let result

/* 選択した手とランダムで取得した値を比較して結果判定値取得
//勝ちパターン
if (mySelect == 0 && jkSelect == 1) || (mySelect == 1 && jkSelect == 2) || (mySelect == 2 && jkSelect == 0) { 
  result = "勝ち"
//負けパターン
} else if (mySelect == 0 && jkSelect == 2) || (mySelect == 1 && jkSelect == 0) || (mySelect == 2 && jkSelect == 1) {
  result = "負け"
//あいこパターン
} else {
  result = "あいこ"
}

 特に問題なさそうです。(実行結果の画像等がありませんが
 長くなりますので割愛しました。)
 おおむねExcelマクロVBAと同じイメージでいけそうですね。
 これで各機能の作成と動作検証ができました。
 今後はそれぞれを正式に実装し、1つのアプリとして完成させます。

◎疑問点とか今後調べたいこととか
 ・GAS単独のプロジェクト(GASファイル)を作成できる?
  →シートから拡張機能で作ると自動的に紐付けされてるような?
 ・プロジェクト内にGASを複数作れそう。どんな時に使える?
 ・オブジェクトとの紐付けの際、ファンクション名指定だが、同名の
  ファンクションがあった場合(先勝ち的?)
 ・実行環境がGoogle側(Excelマクロはクライアント環境・GASは
  クラウド環境)である問題点等とかはある?
 ・実行時の強制終了とかはできるのか?(無限ループとかしたら
  どうなる?)

この記事が気に入ったらサポートをしてみませんか?