Googleスプレッドシートのマクロの記録機能を使ってみた
2018年4月11日、Googleスプレッドシートに大きな機能追加がありました。それが「マクロの記録」機能。Excelではもはやおなじみの、ユーザが操作した内容を記録し、ボタン一発でその操作を再現する機能です。Googleスプレッドシートなので、記録した操作はGoogle Apps Scriptに変換されて保存されます。
また、保存した操作はそのまま改造することも可能なので、Google Apps Scriptで1から構築することは難しいけれど、ちょっとなら直せるというノンプログラマな人にとって、またオフィス事務作業の自動化に大きく貢献する機能を実際に使ってみたいと思います。
目次
今回使用するスプレッドシート
※現在の所、印刷用のメソッドは無いですし、ショートカットキーで例えばメニュー操作をしても記録にはありませんでした。
※マクロの機能ですが、ChromeとSafariで動作検証して動いてることを確認しています。
実際に作ってみる
操作を記録する
操作開始をするには、メニューの「ツール」⇒「マクロ」⇒「マクロを記録」をクリック。その後、実際に操作をしてみます。この記録した内容はバックグラウンドで、Google Apps Scriptに変換されて記録されています。ですので、スクリプトエディタで見ると、一連の記録内容を見る事が出来る様になっています。
記録をした後、「保存ボタン」を押して、名前を付けるだけ。基本Excelのマクロと操作感は一緒です。ですが、VBAのような豊富でトリッキーな事が出来るか?といったら、Google Apps Scriptで対応していないメソッドのものは記録は出来ません。基本的な操作はほぼ全て出来るみたいです。
絶対参照と相対参照の2つがありますが、絶対参照は例えば範囲選択では、どんなシートでも必ず同じ範囲を指定するのに対して、相対参照は自分で選択した領域内で記録をするようです。通常は絶対参照でOKでしょう。
※例えば表に罫線を加え、タイトルに色を付け、余計な列を削除するみたいな操作はOKでした。但し、A1に一度カーソルを持っていってアクティブにした状態で記録を開始しないと上手くいかないシーンがあったので、ここがちょっと癖がありますね。
図:マクロを記録中・・・
マクロを実行する
マクロは名前をつけると、「ツール」⇒「マクロ」の中に既に付けた名前で存在していますので、そのまま実行するだけです。但し、記録の仕方によっては、いきなり赤字でエラーがでたりします。まだちょっとこなれていないなぁという印象です。最初の1回だけは、承認してくださいウィンドウが出る点は、Google Apps Scriptと同じで挙動も同じです。
図:クリックするだけでマクロは実行されます。
マクロを管理
作成したマクロの管理(削除等)や、ショートカットキーの割当は、マクロメニューの中の「マクロを管理」を実行します。ダイアログがでますので、削除したい場合は、対象のマクロの「︙」をクリックして、削除を選べば記録したマクロは削除されます。また、ショートカットキーですが、Mac OS Xの場合は、Option + Shiftに続けて数字だけが今のところ対応してるようで、自分で設定が可能です。
※但し記録したGoogle Apps Scriptは削除されないようです。スクリプトエディタを開くと残ってました。
図:ここにズラッと記録した内容がでます
マクロをインポート
これは、自分で作成したGoogle Apps Scriptのコードをマクロとしてインポート&登録する機能です。試しにメッセージボックスが出るだけの関数を自分で書いて取り込んでみました。
マクロメニューの中の「インポート」を実行すると、自分が書き足したコードの名前が出てくるので、「関数を追加」をクリックします。これでマクロとして登録されました。マクロですので、マクロの管理でショートカットキーを割り当てれば、自分が作成したスクリプトにショートカットキーが割り当てられます。これはちょっと便利ですね。
図:マクロのインポート画面
作られたマクロの正体
スクリプトエディタで見てみる
マクロはスクリプトエディタを開くと閲覧・編集が可能になっています。全てmyFunctionに数字がついた形でFunction名が付けられており、表でマクロを削除しても、コード自体は残されています。また、そのコードの冒頭には「/** @OnlyCurrentDoc */」という文字列が付け加えられています。
さて、マクロのメニューに登録してる場所なのですが、スクリプトエディタで開いた時に出てくる「appsscript.json」の中に記述されています。メニューより「表示」⇒「マニフェストファイルを表示」をクリックすれば、出現します。
このappssript.jsonの中身は以下のようなコードが記述されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "timeZone": "America/New_York", "dependencies": { }, "exceptionLogging": "STACKDRIVER", "sheets": { "macros": [{ "menuName": "整形マクロ", "functionName": "myFunction2" }, { "menuName": "helloscript", "functionName": "helloscript" }] } } |
sheetsの中にあるmacrosに名前と実行する関数名が登録されていました。手動でここに自分の関数を登録もできそうですね。自分が登録したhelloscriptがきちんとインポートされていました。マクロ.gsの中でなくとも大丈夫みたいですね。
図:マクロ.gsとして追記されてます
スクリプトトリガーを使えば・・・
通常マクロというものは、ユーザがアクションを起こしてから実行されます。Excelのマクロも基本ユーザがマクロを実行するから、プログラムが走るわけです。しかし、Googleスプレッドシートのマクロはそれだけでなく、スクリプトトリガーを使う事で、例えば、定期的に勝手に自動実行させるといった事が可能になります。パソコンを起動させておく必要がありません。
スクリプトトリガーで例えば毎日0時に実行であれば、
- スクリプトエディタを開く
- メニューから「編集」⇒「現在のプロジェクトのトリガー」を開く
- トリガーが設定されていませんが表示されたら、それをクリック
- 実行にマクロの関数、時間主導型の「日タイマー」とし、午前0時〜1時を選択して保存する
これで、毎日0時に作成したマクロが実行されます。但し、スプレッドシートを開いていない状態で実行する事になるので、手直しが必要になる部分も出てきます。SpreadsheetApp.getActiveScpreadsheetではなく、予めスプレッドシートのIDを変数に入れておいて、SpreadsheetApp.openById(id)と置き換えておけば問題ないでしょう。一端閉じて、スプレッドシートを開けていない状態で、短めのトリガーで無事動くか?チェックしてから使いましょう。
図:マクロにトリガーの合せ技
動画資料
マクロの作成、実行、そしてその中身を見てみる様子の動画です。音声とかテロップは付けていません。マクロは作成後はGoogle Apps Scriptそのものなので、実行はあっという間です。