Googleスプレッドシートのメニューに「実行」を足してみよう

GAS

※本記事はプロモーションを含みます

目次

編集者がボタンなしで回せるようにする

Google Apps ScriptであるGASを活用すると、表計算ソフトであるGoogleスプレッドシートの機能を拡張できます。拡張した結果として、チームにおける様々な業務を自動化できます。ただし、作成したプログラムであるスクリプトを実行するためには、画面上にあるスクリプトエディタを開く必要があります。なので、プログラムになじみのない非エンジニアのメンバーにとっては操作が難しくなります。というのは、エディタを開く作業自体が、チーム全体でツールを使いこなす際のハードルになるからです。

そこで非常に有効なのが、スプレッドシートの上の枠にあるメニューバーに独自のカスタムメニューを追加する手法です。カスタムメニューを追加すれば、画面上にあるファイルや編集といった標準メニューと同じ並びに、自作のツールを呼び出す項目を表示させることができます。なので、メニューを見つけやすくなり操作の手間が減ります。

これによって、非エンジニアのメンバーがGASを簡単に実行できるようになります。なので、作業の担当者が固定化する属人化を防げます。というのは、スプレッドシートを触るチーム全体の編集者であっても、メニューからならプログラムをスムーズに実行できるからです。使い始める前に、まずはメニューが表示されるかを確認しましょう。

ファイルを開いたときにメニューを足す

実際に画面の上部に独自メニューを追加するためのコードを紹介します。以下のコードを編集画面であるスクリプトエディタに配置します。配置した後に、ブラウザでスプレッドシートを再読み込みしてみましょう。なので、プログラムが動いてメニューが追加されたことを確認できます。

onOpen の最小形

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu("独自メニュー")
    .addItem("実行", "myFunction")
    .addToUi();
}

createMenu から addToUi まで

プログラムの行ごとに仕組みを順に見ていきます。

  • function onOpen() { ... }
    この行は処理のまとまりである関数を定義しています。onOpenという名前は特別な存在です。なので、ファイルが開かれたタイミングで自動的にプログラムが呼び出されます。
  • const ui = SpreadsheetApp.getUi();
    SpreadsheetApp.getUi()という命令は、操作画面の仕組みであるスプレッドシートのUIインターフェースを操作します。取得した画面操作用のデータは、変数uiの中に保存します。なので、この変数uiを使ってメニューやポップアップ画面を表示できます。
  • ui.createMenu("独自メニュー")
    準備したuiに対してcreateMenuという命令を呼び出します。なので、新しいメニューの枠組みが作成されます。文字として渡している"独自メニュー"が、画面の上に表示される名前になります。
  • .addItem("実行", "myFunction")
    メニューの中に押し込める項目を追加します。一押しの文字である第一引数の"実行"は、画面のリストの中に表示されます。ただし、第二引数の"myFunction"は、押しこまれた時に動く関数の名前です。あらかじめfunction myFunction() { ... }を作っておく必要があります。
  • .addToUi();
    最後にこの命令を実行します。なので、組み立てたメニューが実際の画面上に追加されます。追加されたら、メニューが正しく動くかを確認しましょう。

onOpen はファイルを開いたときだけ

プログラムがどのように動作しているか解説します。仕組みを理解しておくとトラブルを防げます。

onOpenトリガーとは

GASには、特定の条件を満たしたときにプログラムを動かすトリガーという仕組みがあります。その中でもonOpenは、特別な設定が不要なシンプルトリガーと呼ばれます。この機能は、ファイルを開いた時に自動実行されます。なので、ボタンを配置しなくてもメニューが自動で作られます。というのは、システムがファイルを開いた動きを検知してプログラムを走らせるからです。ファイルを開いたら、メニューが出現するかを確認しましょう。

getUiの役割

SpreadsheetApp.getUi()の役割は、スプレッドシートのUIインターフェースを操作します。GASは裏側で動くツールです。ただし、この命令を使うことでユーザーが見ている画面にメニューを出せます。画面に警告を出すアラートや、文字を入れるプロンプトを作る時にも役立ちます。まずは小さな表示から試してみましょう。

日報まとめや請求書送信をメニューから

メニューを追加する仕組みは、実際の現場で活躍します。具体的な活用パターンを確認しましょう。

  • 日報データの自動集計:各メンバーが記入したシートのデータを、メニューの一押しで一つの集計用シートにまとめます。なので、転記の時間を減らせます。
  • 請求書のPDF化とメール送信:シートで作った請求書をPDFという電子ファイルに変換し、そのままメールで自動送信します。なので、手作業のミスがなくなります。
  • データの入力チェックと整形:手入力された文字の表記ゆれを自動で直します。ツールを使って確認作業を効率化しましょう。

難しいプログラムの仕組みを隠すことができます。なので、使う人はメニューを選ぶだけで安全に作業できます。業務を自動化するために、使いやすいメニューを設計してみましょう。

閲覧権限だとメニューが出ない

便利なカスタムメニューですが、運用時には権限の注意点があります。

大きな落とし穴は、閲覧権限しかないユーザーにはメニューが表示されない場合があります。というのは、onOpenはファイルを開いた人の権限で動くからです。見るだけの権限である「閲覧者」の場合、GASが画面を変更する動作をシステムが止めます。なので、メニューが表示されなくなります。

ツールを使わせたい人がいるなら、共有の設定を確認しましょう。編集ができる「編集者」の権限を割り当てる必要があります。共有設定画面を開いて、適切な権限になっているかを確認しましょう。

関数名のカッコで落ちる

メニューを作る時に発生しやすいエラーと対策をまとめました。動かない時は参考にしてください。

発生する問題 原因 対策
メニューが表示されない 関数名のスペルミス、または権限不足 関数名が大文字小文字を含めて正確に onOpen になっているか確認する。また、閲覧権限になっていないか確認する。
メニューをクリックしてもエラーになる addItem で指定した関数が存在しない 第二引数(例では "myFunction")と同名の関数がスクリプト内に正しく定義されているか確認する。
「スクリプトが見つかりません」というエラー 関数名の指定時に不要なカッコ () をつけている addItem("実行", "myFunction()") ではなく、文字列として関数名 "myFunction" のみを指定する。

エラーの発生原因の多くは文字の入力間違いです。なので、動かない時はプログラムの文字を最初から見直します。というのは、カッコの有無やスペルの違いでプログラムが停止するからです。エラーが出たときは、権限の設定と関数名の記述を先に見ましょう。

タイトルとURLをコピーしました