みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Googleスプレッドシートに搭載されたマクロ記録の機能についてその使い方を初心者向けに解説をしています。
前回の記事はこちら。
マクロ記録で書き出されたコードの確認方法と、どんなコードが書き出されるかについてお伝えしました。
また、マクロ記録で書き出されたコードが「イケてない」とお伝えしましたが
「じゃあ、イケてるコード教えろや!」
って、なりますよね…
ということで、今回はカーソル移動のマクロについて、マクロ記録のコードを修正してイケてるコードに修正していきます。
では、行ってみましょう!
カーソル移動のマクロとそのコード
さて、題材とするのは、シートが複数ある場合に、シート1のA1セルにカーソルを移動するというマクロです。
ショートカットキー Ctrl + Shift + Alt + 1 を割り当てているので、いつでもキー操作で「ホームポジション」に戻ることができます。
そして、そのマクロ記録をした際に書き出されたコードがこちらです。
/** @OnlyCurrentDoc */ function myFunction() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('C7').activate(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('シート1'), true); spreadsheet.getRange('A1').activate(); };
細かい解説は前回記事で書いていますので、そちらをご覧ください。
今回は、同じ目的を達成する、もうちょっとスッキリしたコードを書いていきます。
カーソル移動をするマクロのコードをリファクタリング
さて、前述のコードを、よりシンプルにスッキリしようとすると、以下のようなコードが作れると思います。
function moveCursor() { SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1').getRange('A1').activateAsCurrentCell(); }
いくつかのメソッドが連結していますが、一行で書けちゃいますね。
簡単に解説をしていきます。
アクティブなスプレッドシートを取得
まず、アクティブなスプレッドシートを取得するgetActiveSpreadsheetメソッドです。
ここでいうアクティブというのはバインドしているという意味ですね。
書式は以下の通りです。
前述のコードで書き出されているgetActiveメソッドと同じ役割ですが、対象がスプレッドシートであることがわかるので、長いですがコチラのほうが読みやすいと思います。
シート名からシートを取得する
続いて、シート名からシートを取得するgetSheetByNameメソッドです。
指定したシート名のシートをSheetオブジェクトとして取得します。
これはわかりやすいですね。
指定したアドレスのセルを取得する
次は、アドレスで指定したセルを取得するgetRangeメソッドです。
アドレスに「’A1’」と指定していますので、シート1のA1セルをRangeオブジェクトとして取得できます。
指定したセルをカレントセルにする
最後に、そのRangeオブジェクトに対してactivateAsCurrentCellメソッドで、カレントセルとしてアクティブにします。
つまり、カーソルを当てるということですね。
Rangeオブジェクトは単体セルでなく、範囲である場合もあるのですが、activateAsCurrentCellメソッドはRangeオブジェクトが単体セルである場合でのみ使用することができます。
まとめ
以上、スプレッドシートのマクロ記録について、書き出されたコードをリファクタリングしました。
修正というよりは、書き直し…って感じですかね。
今回紹介した以外にもベストなコードがあるかも知れませんが、少なくともマクロ記録で書き出されたよりは、短くて意味をすばやく読み取りやすいのではないでしょうか。
このように、マクロ記録は自動でコードを書き出す便利機能ですが、ベストなコードが別にあるということを念頭に活用くださいね。
次回は、マクロの管理についてお伝えします。
どうぞお楽しみに!