だって楽したいじゃんか!

大学院(機械工学科)を首席で卒業した男がこれまでの経験を生かさず殺さず発信していく

【GAS】Google スプレッドシートに独自のメニューを追加しGASの関数を呼び出す方法

f:id:makimakimakino:20190114224927p:plain
こんにちは、まきのです。

今回はGAS関数の実行方法について少し説明します。

Google スプレッドシートを便利にしようとしてGASを組んだはいいものの、毎回GASのScriptエディタから関数を実行するのは手間ですよね。

そこで、スプレッドシートに独自メニューを追加してGASの関数を実行する方法をご紹介します。

こんな感じに
f:id:makimakimakino:20190813141619p:plain

スプレッドシート作成

まずはボタンを追加したいスプレッドシートを作ります。

Google Driveを開き[+新規]>[Google スプレッドシート]>[空白のスプレッドシート]を選択します。

スプレッドシートを開いたら、メニューの[ツール]>[スクリプトエディタ]を押下し、Scriptエディタを開きます。

コード作成

準備ができたらコードを書いていきます。

  • onOpen関数でSpreadSheetを開いたときにメニューが作成されるようにする
  • addMenu関数でメニューを定義し、メニューと関数を紐づける
  • メニューと紐づけた関数の処理を記述していく


コード.gs

function onOpen() { // onOpen関数でスプレッドシートを開いたときにメニューが作成されるようにする
  SpreadsheetApp
    .getActiveSpreadsheet()
    .addMenu('メニュー', [  //addMenu関数でメニューを定義し、メニューと関数を紐づける
      {name: 'ボタン1', functionName: 'func1'},
      {name: 'ボタン2', functionName: 'func2'}
    ]);
}

function func1() {  //メニューと紐づけた関数の処理を記述していく
  //ボタン1が押されたときに呼び出される関数
  Browser.msgBox("ボタン1が押されました。");

}

function func2() {  //メニューと紐づけた関数の処理を記述していく
  //ボタン2が押されたときに呼び出される関数
  Browser.msgBox("ボタン2が押されました。");
}

実行方法

ソースが書き終わったら、一度スクリプトエディタ上でonOpen関数を実行します。

するとスプレッドシートを再読み込みしたときにメニューに独自に定義したメニューが追加されています。

f:id:makimakimakino:20190813141619p:plain

押してみると、それぞれを押したときの関数が実行されると思います。

f:id:makimakimakino:20190813141921p:plain

解説と注意点

onOpen

onOpen関数は、スプレッドシートを開いたときに実行されるイベントハンドラです。

イベントハンドラは何らかのイベントが発生したタイミングに実行してくれる機能です。

スプレッドシートをリロードするたびにonOpen関数が実行されます。


addMenu

メニューを追加するときには、SpreadsheetオブジェクトのaddMenu関数を使います。

引数には、メニュータイトル, 追加するメニューの配列を指定します。

メニュータイトルはスプレッドシートのファイルとか編集とかその並びですね。

追加するメニューの配列は {name: 'メニュー名', functionName: '関数名'}という形で、複数指定する場合はカンマ( , )区切りで配列の[]で囲って指定します。

複数メニューの間にnullを挟むと区切り線が表示されるようです。

まとめ

SpreadSheetに独自メニューを追加してGASの関数を実行する方法をご紹介しました。

これでいちいちGASのScriptエディタを開かなくても関数を実行できるようになりました。

メニュー名やメニューの数などは目的に応じて変えてみましょう。

今回は関数には何も指定をしていませんが、作りこみ次第でスプレッドシートに書き込まれたメールアドレス一覧にまとめてメールを送る。とか、

カレンダーの予定一覧をリスト化するとか、特定のメールの内容を抽出するとかとか様々なことに応用が利くと思います。