にわかプログラマの備忘録

仕事の過程で調べたことを忘れないように記載しています

スプレッドシートでGASを使う時のおすすめ事前準備

GASを使用するとき、エディタなどの開発環境は特別必要ありませんが、スプレッドシートで使用するときはシートの値を見ながらプログラムのテストをしたいな、と思います。
でも、AppsScriptで作成した関数はスプレッドシートからはボタンが無いと実行できず、console.logもシートからは確認できません。

そのため、スプレッドシートから関数を実行できるようにしていきます。

メニューを追加する

f:id:sorane0908:20210630144513j:plain
メニュー
function onOpen() {//スプレッドシートを読み込んだら実行
  var ui = SpreadsheetApp.getUi();//メニューを取得
  ui.createMenu('オプションメニュー')//メニュー名を作成
    .addItem('テスト', 'test')//メニュー項目と実行関数を指定
    .addSeparator()//区切り線を引く
    .addItem('テスト2', 'test2')
    .addToUi();
}

上記を設定すると

f:id:sorane0908:20210630144516j:plain
メニュー2

こうなります。

シート上に図形描画でボタンを作ってもいいのですが、正直こちらの方が楽かと。ボタンのUIにこだわらないのであれ十分だと思います。

中身を確認する

Browser.msgBox('表示したいもの');

consol.logの代わりです。まぁ、ブラウザ上にメッセージBoxを表示するだけですが。
シート上で関数を実行すると、ブラウザの検証でもlogは表示されません。(AppsScriptの[実行数]から実行した関数の詳細を見れば確認できます)
ので、もう直に表示させるしかないと思います。

スプレッドシートでGASを使う時の注意

正直、カスタム関数にしろ、普通の関数で入力ごとに取得して表示するにしろ、Excelと比べるとかなり遅いです。
そのため、入力場所が決まっているのであればすべて関数(裏)で処理することをお勧めします。

GASで扱う スプレッドシートの基本

GASで使用するクラス

SpreadsheetApp
一番の親のクラス

Spreadsheet
Excel で言うブックにあたる部分を扱うクラス

Sheet
Excel で言うタブにあたる部分を扱うクラス

Range
Excel で言うセルにあたる部分を扱うクラス

ファイルの指定方法

ファイルの名前より裏でつけているIDで指定する方が確実。
IDはURLから確認できる。
https://docs.google.com/spreadsheets/d/スプレッドシートID/edit?resourcekey=0-ccdS5FsU9lB1SaOJEZS_kQ#gid=シートID

現在選択中のセルの値を取得する

  var sheet = SpreadsheetApp.getActiveSheet(); //シートを取得
  var cell = sheet.getActiveCell(); //アクティブセルを取得
  var cellValue = cell.getDisplayValue(); //セルの値を取得

スプレッドシート カスタム関数

無難にカスタム関数から弄ってみたものの、説明文がうまく表示できずに躓く羽目に。
そして結果解決していない。

公式とも、調べて出てきたサイトとも書き方は変わってないし、何ならコピペしても結果は同じ。
解せないがメインじゃないので諦めた。

解決!一番下に記載

カスタム関数基本

/**
 * 消費税を10%で税込みを表示します
 *
 * @param {number} price 税込みにしたいものを指定
 * @return {number} 税込み価格が返ります
 * @customfunction
 */
function jpTAX(price){
  var totalPrice = price * 1.1; 
  return totalPrice;
}
f:id:sorane0908:20210609101728j:plain
カスタム関数の表示

コメント部分はなくても動きますが、オートコンプリートで出てきたり、概要が出たりと表記をお勧めします。
特に自分以外の人が使うならなおさらね。

コメントの書き方は JsDoc 関数は JavaScript

関数部分は税込み表示にするものですが、実際使う気はなくテストで作ったもののため適当です。

コメント部分詳細

/**
 * 消費税を10%で税込みを表示します
 *
 * @param {number} price 税込みにしたいものを指定
 * @return {number} 税込み価格が返ります
 * @customfunction
 */

上から 関数概要、引数概要、返り値概要、関数だという宣言 になっています。

関数概要を複数行で記載すると改行は無視されました。

引数は

@param {データ型} 名前 概要

となっています。

返り値概要はスプレッドシート上では表示されないため、メモ程度の扱いでいいかと思います。

@customfunction

これを記載することでオートコンプリートが動作します。

関数部分詳細

function 関数名(変数){
  ~~中身~~
  return 返り値;
}

JSそのままなので割愛。
大文字小文字は判別されている様子です。

その他

同じファイル上でもコメントと関数を交互に書けばちゃんとそれぞれの説明として認識されていました。
JsDocでは常識なのかな。

概要が表示されない場合

f:id:sorane0908:20210609104542j:plain
関数表示エラー

最初はコメント部分を正しく記載したにも関わらず、概要が表示されませんでした。

最終的に関数にカーソルを合わせ、右に行ったり、左に行ったりしているうちにが=の前に表示され、それをクリックしたら概要が表示されるようになりました。

私のスプレッドシートの設定なのか、通常動作なのかは不明なままですが、表示されたのでよしとします。

GASを使いだした

仕事で Google Apps Script を使ってやりたいことができたものの、ネット上にわかりやすいリファレンスもなかったので自分で分かったことをまとめていこうかと。

なので、基本は Google スプレッドシート でのGASの使い方になるかと。
他での使用予定は今のところないので。

基本的な使い方

スプレッドシートでAppsScriptを使うときは
[ツール]>[スクリプトエディタ]で起動

まだ始めたばかりなので、別途作成したAppsScriptをスプレッドシートに紐づける方法は不明。

AppsScriptだけを使用する場合はGoogleドライブから新規作成で作れる。Googleドライブから作成したものは直接Googleドライブに保存されているが、スプレッドシート内で作成したものはGoogleドライブからは開けない様子。

マクロとAppsScript

マクロはAppsScriptで記録されているので、マクロの中身はAppsScriptで見れるがAppsScriptで何か作ったからマクロに表示されるわけではない。

ただ、一度記録したマクロの中身を書き換えればマクロとして表示されるので[ツール]>[マクロ]の中に表示されるので起動ボタンを作るよりは簡単そう。

カスタム関数

Excel の関数のようなものを自分で作れるわけだが、計算に30秒以上かかるのはエラーになるとか、簡単な計算にしろとか書かれているのでどの程度使えるのかはわからない。今のところ使う予定もないけど、基本の書き方だけは後で別でメモしとこうと思う。