スプレッドシートのマクロ記録で書き出されたコードを確認する方法


recording

photo credit: North Charleston North Charleston Summer Camp via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

さて、Googleスプレッドシートに搭載されたマクロ記録の使い方についてお伝えしています。

前回の記事はこちら。

スプレッドシートのマクロ記録で簡単便利なカーソル移動のマクロを作ってみよう
スプレッドシートにマクロの機能が追加されました。マクロ記録を使えば、スプレッドシートの操作を記録しコードとして起こすことができます。今回は、その概要とともに記録と実行の方法を初心者向けに解説をしていきます。

マクロ記録の概要と、記録から実行までの一連の流れについてお伝えしました。

さて、今回はスプレッドシートのマクロ記録によって書き出されたスクリプトを編集する方法をお伝えしつつ、書き出されたコードがどのようなものかを確認していきたいと思います。

では行ってみましょう!

スポンサーリンク

記録されたマクロをのコードを編集する

では早速、記録されたマクロのコードを編集してみましょう。

まず、スプレッドシートのメニューから「ツール」→「マクロ」→「マクロを管理」とたどります。

スプレッドシートのメニューからマクロを管理を選択

すると「マクロの管理」ダイアログが開きますので、縦に点3つのメニューアイコンをクリックしてメニューを開き、「スクリプトを編集」を選択します。

スプレッドシートのマクロの管理ダイアログからスクリプトを編集

スクリプトエディタが開き、記録されたマクロのコードを確認・編集することができます。

スプレッドシートのマクロ記録で記録したコードをスクリプトエディタで開く

マクロの保存時にスクリプトを編集する

なお、マクロを保存してすぐにスクリプトを開いて編集することもできます。

保存したときの、以下のメッセージで「スクリプトを編集」をクリックすることで、スクリプトエディタで開きます。

スプレッドシートでマクロを保存したときにスクリプトを開く

スプレッドシートのツールメニューから開く

さらにさらに、通常のスクリプトエディタを開く手順でもマクロ記録のコードを開くことができます。

スプレッドシートの「ツール」→「スクリプトエディタ」です。

スプレッドシートのツールメニューからスクリプトを開く

カーソル移動のスクリプトを確認する

さて、カーソル移動のマクロについてスクリプトを確認していきましょう。

以下のスクリプトになります。

/** @OnlyCurrentDoc */

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C7').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('シート1'), true);
  spreadsheet.getRange('A1').activate();
};

ドキュメンテーションコメントOnlyCurrentDoc

まず1行目の以下の部分。

@OnlyCurrentDoc

ドキュメンテーションコメント内に@OnlyCurrentDocとありますね。

これは読んで字のごとくですが、スクリプトが「CurrentDoc」つまり今回の場合は、バインドしているスプレッドシートのみしかアクセスしませんよ、という明示になります。

つまり、バインドしているスプレッドシート以外のドキュメントにはアクセスできなくなります。

function名はmyFunction

3行目を見れば分かる通り、function名は「myFunction」になります。

同じスプレッドシートで複数回マクロ記録をした場合には、myFunction1,myFunction2,…というfunction名になります。

getActiveメソッドとは

次に4行目。以下のgetActiveメソッドが使われています。

SpreadsheetApp.getActive()

これは、以下と同じで、アクティブな(つまりバインドしている)スプレッドシートを取得するメソッドです。

SpreadsheetApp.getActiveSpreadsheet()

「Active」だけだと、スプレッドシートなのか、セルなのか、何なのかちょっと分かりづらいですね。

セルをアクティブにする

続いて5行目。

まず、ちょっと不思議メソッドですが、スプレッドシートに対してgetRangeメソッドを使っています。

Spreadsheetオブジェクト.getRange(アドレス)

本来ならgetRangeメソッドはSheetメソッドに対して実行するのですが…Spreadsheetオブジェクトから直接使えるのですね。

その場合は、アクティブなシートが対象になるわけですね。

続いて、セルC7に対して、activateメソッドを実行しています。

Rangeオブジェクト.activate()

対象となるRangeオブジェクトの左上のセルをアクティブにするというものです。

ただ、このステートメントは今回のカーソル移動マクロでいうと不要なステートメントですね。

シートをアクティブにする

6行目は、スプレッドシートに対してsetActiveSheetメソッドです。

SpreadSheetオブジェクト.setActiveSheet(Sheetオブジェクト, restoreSelection)

1つ目の引数で指定したSheetオブジェクトをアクティブにします。

ですから、今回の場合は「シート1」をアクティブにしているということになります。

2つ目の引数は、アクティブにしたシートの前のセル選択状態に戻すかどうかをtrueまたはfalseで指定するものです。

が、今回のマクロではこの引数の指定は必要ありませんね。どうせA1セルをアクティブにしちゃいますから。

そして、7行目で再びactivateメソッドでA1セルをアクティブにする、つまりカーソルがA1に移動するということになります。

マクロ記録で書き出されたコードについて

さて、細かく解説してきましたが、わかりましたでしょうか?

つまり、マクロ記録で書き出されたコード

  • いらないステートメントが含まれている
  • ちょっと人にはわかりづらいステートメントが含まれている
  • いらない引数が含まれている

などといったことがあるようです。

つまり、これらのコードよりも、もっと良いコードがほぼ間違いなく存在しています。

もっと端的に言うと、イケてないコードなのです。

リファクタリングのすすめ

よくわからずにこれらのコードをコピペで使いまわしたりして、うっかり動いてラッキー!

みたいなのを繰り返していると、メンテナンス性や再利用性の低いイケてないコードが量産されることになります。

ですので、マクロ記録で書き出したコードを修正したり、再利用したりする際には、そのマクロの動作の結果は変えずに、もっと別の良いコードに直しながらの作業をするのがオススメです。

そのような作業をリファクタリングと言います。

マクロ記録はノンプログラマーにとって強力な武器ではありますが、気をつけないとイケてないコードを量産してしまうというデメリットもありますので、その点はよくよく留意して活用くださいね。

まとめ

以上、スプレッドシートのマクロ記録で書き出されたコードを編集する方法とともに、書き出されたコードを確認してみました。

マクロ記録はノンプログラミングで作業を自動化することができる強力な機能です。

一方で、本記事でお伝えした通り、書き出されたコードはイケてないコードですので、いざ使い回そうとするときには注意が必要です。

もっと良い書き方があるという前提で、ぜひ取り組んでくださいね。

次回はマクロ記録で書き出されたコードを手直ししてみますよ。

スプレッドシートのマクロ記録で書き出されたコードをリファクタリング
Googleスプレッドシートに搭載されたマクロ記録の機能についてその使い方を初心者向けに解説をしています。今回はカーソル移動のマクロについて、マクロ記録のコードを修正してイケてるコードに修正していきます。

どうぞお楽しみに!

連載目次:【初心者向け】スプレッドシートのマクロ記録の活用法

Googleスプレッドシートに満を持して搭載された「マクロ記録」。このシリーズでは、マクロ機能の概要と、その使い方、また書き出されたコードの編集や活用の仕方などを初心者向けにお送りしていきます。
  1. スプレッドシートのマクロ記録で簡単便利なカーソル移動のマクロを作ってみよう
  2. スプレッドシートのマクロ記録で書き出されたコードを確認する方法
  3. スプレッドシートのマクロ記録で書き出されたコードをリファクタリング
  4. スプレッドシートのマクロ機能で関数のインポートをする方法とマクロの削除の方法
  5. スプレッドシートのマクロ記録時の絶対参照と相対参照の違いとは

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