【スプレッドシート】GASを開かずにマクロ実行する方法

GAS で書いた処理を起動する時、一々メニューバーから拡張機能から Google App Script を選択して別画面へ遷移、からの実行。これってかなり面倒。

スプシ起動時等のトリガーを設定しておけば解決なのだが、諸々の事情で任意起動しないといけない場合、一回一回タブが増えるのはやはり面倒。

なんで面倒って事を 2回も説明してんねん。
まぁ大事な事はなんとやらか…。

それはそうと

別画面へ遷移せずとも GAS を動かす方法は無いものか…、ありました。

  • 画像挿入して、画像にスクリプトを割り当てることでボタンとして使う方法
  • gasにコードを追加して、メニューバーにマクロ実行の項目を追加する方法

順を追って説明します。

方法1 マクロ実行ボタン追加

こっちの方法のメリット: コードを追加しなくて良い
デメリット: シート上に図形を挿入する必要がある

手順をざっくり説明。

ボタンで GAS起動する手順
  1. メニューバーの “挿入” を選択して、”図形描画” をクリックする
  2. 図形描画画面で任意の図形を選択して、ドラッグで図形を作る
    出した図形をクリックして文字を入力することを推奨
  3. 図形を選択すると右上に三点リーダーが表示されるので、それをクリックする
  4. “スクリプトの割り当て” をクリックする
  5. ボタンクリックで実行したいメソッド名を入力して、確定をクリックする
  6. 図形描画画面の “保存して閉じる” をクリックする
  7. シート上に表示された図形をクリックすると、マクロが起動する

まず図形をシート上に挿入します。

メニューバーの “挿入” にマウスカーソルを合わせると下の画像のようなメニューが表示されるので、図形描画をクリックします。

クリックすると、図形描画の画面が表示されます。

下の画像の通りに 1 – 3 番で図形を選び、4番の箇所でドラッグする(マウスの左を長押ししつつ動かす) と図形ができます。
そして、図形に “ボタン” や “自動入力” 等のマクロ / GAS / 処理に合った名前を入力してあげるとわかりやすいです。

画像を選択していると三点リーダーが表示されるので、それをクリックします。
すると選択肢が表示されるので “スクリプトを割り当て” をクリックして、実行したいメソッド名(関数名) を入力して確定をクリックします。

図形描画の画面へ戻るので右上の “保存して閉じる” をクリック。

シート上に表示された図形をクリックするとマクロが起動します。

余談ですが、図形を右クリックすることでマクロを起動させずに図形を選択できます。

方法2 マクロ実行メニュー追加

メリット: シートの邪魔をしない
デメリット: コード追加する必要がある

そりゃあ利点も反転しますわ。

メニューバーにマクロ実行メニューを追加する手順
  1. 拡張機能から GAS を開く
  2. GAS のコードに UI を追加するメソッドを追加して保存する
  3. メニューバーの右端に新たなメニューが追加される
  4. 追加されたメニューをクリックすると、マクロが起動する

今回はシートではなく GAS を弄る。

▼以下のコードを .gs ファイルに追記する。各項目については後述する。

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui
  .createMenu('マクロ実行')
  .addItem('各項目を入力', 'autoInput')
  .addToUi();
}

メソッド名は適当で大丈夫。だと思う、たぶん。

SpreadsheetApp.getUi() で開いているスプシの UIデータを取得。
.createMenu() で第一引数で指定した名称でメニューを追加。
.addItem() で、上記で追加したメニューに第一引数で指定した名称のマクロ実行ボタンを追加。第二引数には実行するマクロのメソッド名を指定。
.addToUi() で上記で設定した UI を実際に追加。

あと、改行してはいるが、これ 1行なので ! 繋がってるので !
▼こういう風にも書ける。こうした方が理解はしやすいが、あまり書かない。

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('マクロ実行').addItem('各項目を入力', 'autoInput').addToUi();
}

▼なんならこうも書けるか。書けるか ?

function onOpen() {
  SpreadsheetApp.getUi().createMenu('マクロ実行').addItem('各項目を入力', 'autoInput').addToUi();
}

こうは絶対書かないと思う。というか文法として間違ってる ? まぁいいや。

話を戻すぞ。
元あるスクリプトに今紹介したコードを追加して保存する。
その後、スプシに戻って再読み込みすると先程まで存在していなかったメニューが追加される。

方法1 の説明を懇切丁寧にし過ぎて疲れたために、方法2 を雑に説明してしまいました…。
方法1 の説明を終えた後、GAS 書いてる人間にここまで丁寧に書かなくてもええやんと思い至り悲しみで涙が止まりませんッ ! (泣)

参考文献

[1] “Googleスプレッドシートのスクリプト実行方法とボタンの実行方法” https://www.acrovision.jp/service/gas/?p=269

[2] “スプレッドシートにカスタムメニューを追加する方法” https://uncle-gas.com/spreadsheet-custom-menu/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA