![見出し画像](https://assets.st-note.com/production/uploads/images/99777204/rectangle_large_type_2_c06f35586e1c9b0421af76ff82e5e2c7.png?width=1200)
VBA・マクロ開発経験者がGAS(Google Apps Script)をさわってみる 2
前回はGoogleスプレッドシート・GASでじゃんけんマシンを
作成してみよう、ということで簡単な画面イメージと主機能を
列挙しました。
(前回分はこちら↓)
今回は実際のGASでの操作と、必要機能・コーディング確認を
していきます。
■スプレッドシート・GASの初期作成
Excelマクロ(VBA)での開発経験から、GASでも同様なアプローチが
できないかと色々調査してみて、以下の操作や存在がわかりました。
① 拡張機能 AppsScript
② プロジェクトの生成・.gsファイルの生成
③ functionの生成
④ オブジェクトとマクロ(GAS)の紐づけ
大きくわけると①~③ と ④ になりますが、
GAS側でコードを記述する・function(機能)を作成する部分(①~③)と、
その作成した機能をシート側の制御に連動させる(④)、という
流れです。
① 拡張機能 AppsScript
![](https://assets.st-note.com/img/1678266528256-aHPrrouPTr.png)
② プロジェクトの生成・.gsファイルの生成
③ functionの生成
![](https://assets.st-note.com/img/1678266723279-wb6ivF7CRa.png?width=1200)
④ オブジェクトとマクロ(GAS)の紐づけ
![](https://assets.st-note.com/img/1678266794540-iEqO6UWuQo.png)
![](https://assets.st-note.com/img/1678267135771-hmwWnhPuvH.png?width=1200)
これでオブジェクト(ボタン)を押下した時に、作成した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は
クラウド環境)である問題点等とかはある?
・実行時の強制終了とかはできるのか?(無限ループとかしたら
どうなる?)
この記事が気に入ったらサポートをしてみませんか?