Google Apps Script(GAS)のスクリプトを作成しても、その実行をスクリプトエディタの画面から行うのであれば、それはいまいちです。今回はスプレッドシート上からGASのプログラムを実行する方法をご紹介します。GASの実行方法には次のような方法がありますので、ひとつずつご紹介します。
- スプレッドシート上にボタン(図形)を作成し、ボタンを押下してスクリプトを実行する。
- スプレッドシートにオリジナルメニューを追加して、そのメニューで実行する
- トリガーを利用して、自動起動を設定する
スクリプトの作成
以前のブログ「【完全解説】googleスプレッドシートの使い方(Excel⇔スプレッドシート)」で、xlsxの「有給休暇管理表」をスプレッドシートに変換しましたが、元のxlsmの「有給休暇管理表」では「シートの追加」や「シート名の変更」は、VBAマクロで組んでいます。
そこで、今回は「シートの追加」や「シート名の変更」をGASで組み込んで、xlsmの「有給休暇管理表」と同等のスプレッドシートを作成して、VBAと同様にスクリプトを実行できる様にします。ここでは「シートの追加」スクリプトと、「シート名の変更」スクリプトを組み込んで、「ボタンを押下して実行する方法」と「オリジナルメニューで実行する方法」、「トリガーを設定して実行する方法」の3つの方法をご紹介します。
こちらのスプレッドシートに、「シートの追加」スクリプトと、「シート名の変更」スクリプトを組み込みます。
組み込むスクリプト
「シートの追加」スクリプト
「シートの追加」ボタンを作成してボタンを押すと新しいシートが追加される様にします。現状「シートの追加」ボタンがない為、白紙のシートである「原紙」を手動でコピーするようにしていますが「シート追加」のボタンを設置してボタンを押下することでシートの追加ができるようにします。
「シート名の自動入力」スクリプト
社員番号・氏名が編集された時点で「社員番号+氏名」をシート名として自動的に書き込むようにします。
スクリプトの作成
まず、現状のスプレッドシートにVBAと同様に上記2つのスクリプトを組み込みます。
「シートの追加」スクリプト
コピーしたシートは表示に切り替えないと非表示のままとなります。また、シートを先頭に移動させる為にはアクティブにする必要があります。
「シート名の自動入力」スクリプト
入力された「社員番号」+「氏名」をシート名としてセットします。
ボタンを押下して実行
スプレッドシート上にボタンを作成して、そのボタンをクリックすることで処理を実行する方法について解説します。
注意:
「原紙」シートは非表示としています。「シートの追加」ボタンには、「シートの追加」スクリプトを割り当てています。
「シートの追加」ボタンの作成
「シートの追加」スクリプトは、ボタンを設置して、ボタンが押下されたらスクリプトを実行する様にしますので、「シートの追加」ボタンを作成します。
「図形描画」をクリック
スプレッドシートを開いて「挿入」から「図形描画」をクリックします。
図形の選択
別ウインドウが表示されますのでお好きな図形を選択します。
「保存して終了」をクリック
「シートの追加」はテキストで入力します。良ければ「保存して終了」をクリックします。
ボタンの表示
「保存して終了」をクリックすると、作成したボタンがGoogleスプレッドシート上に表示されます。
ボタンの位置調整
右クリックすると、手のマークとなりますので図形を掴んで、ボタンの位置を調整します。色や文字、形を変更したい場合は図形(ボタン)を右クリックして「︙」をクリックから「編集」を選択することで編集することが可能です。
スクリプトの割り当て
Googleスプレッドシート上にボタンが作成できましたら、ボタンに実行機能をもたせます。ここでは、「シートの追加」スクリプト(myFunct1)を割り当てます。
注意:
「シート名の自動入力」スクリプトはボタンでの実行にはなじまないので、トリガーの設定で実行する様にします。
「︙」をクリック
図形をクリックすると青枠で囲われて、図形の右上には縦に「︙」が表示されますので、「︙」をクリックして「スクリプトを割り当て」をクリックします。
関数名の入力
別ウィンドウが表示されますので、自分で作成したfunctionの関数名を入力します。今回作成した関数は「myFunct1」と「myFunct2」ですが「シートの追加」ボタンに実行機能をもたせるスクリプトは「myFunct1」なので、ここでは「myFunct1」と入力します。
これでOKを押すと作成したボタンに実行機能をもたせることができます。
ボタンを押下して実行
「シートの追加」ボタンをクリックして、スクリプトが正しく実行されるかを確認します。
正しく実行されました。が、コピー元の「原紙」シートに、「シートの追加」ボタンを設置していませんので、コピー元の「原紙」シートにも「シートの追加」ボタンを設置します。「原紙」シートにもボタンを設置して、完了です。
オリジナルメニューで実行
次に、スプレッドシート上にメニューを作成して、そのメニューをクリックすることで処理を実行する方法について解説します。
※メニューの名前は、「独自メニュー」としました。
メニューを選択すると、「シートの追加」と「シート名の設定」という2つのメニューが表示されますので、該当のメニューを選択して実行します。
オリジナルメニューの作成
「メニュー追加」のスクリプト
onOpen() という関数は、スプレッドシートを開いた際に自動で呼び出される関数です。
var menuEntries = [ ]; でメニュー用の配列を定義し、menuEntries.push({ name: “シートの追加”, functionName: “myFunct1” }); で、配列にメニューを追加しています。
追加するメニューは、 {name: “サブメニュ名”, functionName, “呼び出す関数名”} という形式になっています。 メニューにセパレーター(メニューの区切りの線)を追加するには、menuEntries.push(null); のように null を追加することで可能です。最後に、ss.addMenu(“独自メニュー”, menuEntries); で、スプレッドシートに追加します。
※このスクリプトを実行すると、スプレッドシート上にメニューが追加されます。
追加された「オリジナルメニュー」
オリジナルメニューで実行
オリジナルメニューで「シートの追加」スクリプトを実行します。
シートが追加されました。
トリガーを設定して実行
トリガーの設定
GASのトリガーとは、特定条件(きっかけ)でGASスクリプトを実行させる仕組みのことです。「スプレッドシートを編集する」や「特定の時間になる」等、スクリプト実行のきっかけとなるイベントをあらかじめ指定しておくことで、処理を自動化・効率化することができます。GASのトリガーには大きく分けて、Simple triggers(シンプルトリガー)とInstallabletriggers(インストーラブルトリガー)が存在します。
「Simple triggers」はGASのスクリプト上でトリガーを設定する方法で、
「Installable triggers」はスクリプトエディターで設定する方法です。
Installable triggersのほうが簡単で使い勝手が良いですが、Simple triggersはスクリプト上で設定できることで入力された値や条件によってトリガーを変更するなど、柔軟なトリガー設定が可能です。
ここでは、インストーラブルトリガーについて解説します。
「トリガー」をクリック
エディタのスクリプトファイル横にあるタブのうち、時計マークをクリックします。
「+トリガーを追加」をクリック
トリガーの設定
「実行する関数」と「イベントのソース」を設定します。
実行する関数
あらかじめ作成した関数名が表示されます。(複数ある場合は複数表示される)
ここでは、「シート名の自動入力」スクリプトを実行する関数(myFunc2)を選択します。
実行するデプロイ
実行対象となるバージョンを選択できます。「Head」が最新のデプロイで、バージョンXXは過去のデプロイとなります。現在、選択肢はありませんので、そのままOKです。
イベントのソース
GASをどのタイミングで実行するかを設定します。ここでは、スプレッドシートからを選択します。
- 時間主導型:特定の時間単位(日時、週次、月次など)で実行します。
- スプレッドシートから:
スプレッドシート、ドキュメント、フォーム等の起動や編集、送信時に実行します。 - カレンダーから:カレンダー更新時に実行します。
イベントの種類
関数(myFunct2)は、社員番号、氏名を編集した時に実行したいので、「編集時」を選択します。
「保存」をクリック
設定が完了しましたら、「保存」をクリックします。
「トリガーの追加」の完了
トリガーを設定して実行
関数(myFunct2)は、社員番号、氏名を入力すると、シート名が「社員番号+氏名」に書き換わるというスクリプトです。
社員番号、氏名を入力してみます。
「原紙のコピー」のシートの方も入力してみます。
トリガーの削除
設定したトリガーを削除する方法をご紹介しておきます。
「トリガー」をクリック
スクリプトエディターの画面で左のメニューから「トリガー」を選択します。
「︙」をクリック
「トリガーを削除」をクリック
表示されたメニューから「トリガーを削除」をクリックします。
削除の確認
「トリガーの削除」をクリックすると、再度確認メッセージが表示されますので、「完全に削除」をクリックします。