GASのgetActiveSpreadsheetでできる機能まとめ

Google Apps Script、通称GASは「ガス」や「ギャス」「ジーエーエス」と呼ばれたりしていますが、近年、このGASを使う企業や個人の方が増えてきています。筆者もそのうちの1人で、以前はデータを集計して自動化する際にはExcelでVBAを用いることが多かったのですが、ここ数年でGoogleスプレッドシートでGASを使用する機会が多くなってきました。はじめてGASを使用したときは調べながら進めていきましたが、つまずいたり、疑問に思ったことがたくさん出てきました。

そこで、この記事を見てくださっているあなたに少しでも力になれればと思いシェアしていきたいと思います。この記事ではGASで最初につまずくであろうgetActiveSpreadsheet()の使い方や機能についてわかりやすく紹介していきます。

GASのgetActiveSpreadsheet()でできる機能

プログラミング言語を用いてコードを書く際は規則に沿って書かなければいけません。GASも立派なプログラミング言語なので当然、規則に沿って書きます。GASでGoogleスプレッドシートに何らかの処理をしたい場合、まずはスプレッドシートを指定して取得する必要があります。Excelでいうところの「ブック」にあたるのが「スプレッドシート」です。ちなみにExcelでいう「シート」はスプレッドシートでも「シート」になります。

getActiveSpreadsheet()のサンプルコード

getActiveSpreadsheet()の基本的なコードは以下です。

  • var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

「var」は変数を宣言するために必要です。varをつけない場合はグローバル変数として解釈されます。

「spreadsheet」は変数です。任意で決めることができますが、ここは誰が見てもわかりやすいものにしたほうが良いでしょう。

「=」は代入という意味です。プログラミング言語を勉強したことがある方なら理解されているかと思います。右辺を左辺に代入する、という意味です。「等しい」という意味のイコールは「==」と表すので注意してください。

「SpreadsheetApp」は「クラス」に値するものです。これを記述しないとスプレッドシートやシートなどを取得することができません。必ず記述しましょう。

「.」は日本語でいう「〜の」という意味で捉えるといいでしょう。

「getActiveSpreadsheet()」はアクティブなスプレッドシートを取得するという意味です。スプレッドシートを取得するために必ず記述しましょう。また、アクティブではないスプレッドシートの取得方法も存在しているので後ほど説明します。

「;(セミコロン)」は文の区切りを意味します。GASでは記述しなくても改行をすれば文の区切りを暗黙的に解釈してくれますが、一般的には「;(セミコロン)」をつけることが多いです。

getActiveSpreadsheet()でできること

上に記したサンプルコードをそのまま使用しても問題ありません。ただし、getActiveSpreadsheet()は「アクティブなスプレッドシートを取得する」という意味の通り、今開いているスプレッドシートとスクリプトが紐付いてる場合に有効な記述方法です。スプレッドシートとスクリプトが紐付いていない場合はgetActiveSpreadsheet()は使えません。つまりアクティブではないスプレッドシートは別の方法で記述する必要があります。

アクティブではないスプレッドシート(ブック)を指定して取得する方法

GASにアクティブではない別のスプレッドシートを指定したい場合はgetActiveSpreadsheet()は使わずに別の記述方法を用います。

  • openById(id)
  • openByUrl(url)

これら2つの記述方法があるので、1つずつ説明していきます。

openById(id)のサンプルコード

openById(id)の基本的なコードは以下です。

  • var spreadsheet = SpreadsheetApp.openById(id);

getActiveSpreadsheet()がopenById(id)に変わっただけです。ただし注意が必要です。idの部分はスプレッドシートのURLに記載されているidを記述する必要があります。スプレッドシートのURLのidは

  • https://docs.google.com/spreadsheets/d/xxxxxxxxx/edit~~~

このxxxxxxxxxの部分です。xxxxxxxxxはスプレッドシートごとに異なるので注意してください。openById(id)のidをxxxxxxxxxに変えると下記のようになります。

  • var spreadsheet = SpreadsheetApp.openById(“xxxxxxxxx”);

これでアクティブではないスプレッドシート、つまりスクリプトと直接紐付いていないスプレッドシートを指定して取得することが可能になります。次はもう1つの記述方法についてです。

openByUrl(url)のサンプルコード

openByUrl(url)の基本的なコードは以下です。

  • var spreadsheet = SpreadsheetApp.openByUrl(url);

これはopenByUrl(url)に変わっただけです。このurlはスプレッドシートのurlで、https://から始まるアレです。

  • https://docs.google.com/spreadsheets/d/xxxxxxxxx/edit~~~

idの場合はxxxxxxxxxでしたが、urlなのでhttps://から最後までとなります。書き換えると下記のようになります。

  • var spreadsheet = SpreadsheetApp.openByUrl(“https://docs.google.com/spreadsheets/d/xxxxxxxxx/edit~~~”);

openById(id)とopenByUlr(url)を使用する際に気をつけなければいけないのは「””(ダブルクオーテーション)」をつけることです。これを忘れるとエラーで処理が実行できません。

用途によって使い分けよう

  • getActiveSpreadsheet()
  • openById(id)
  • openByUrl(url)

この3つを紹介しましたが、それぞれの使い方はおわかりいただけましたでしょうか。
アクティブなスプレッドシート、つまりスクリプトとスプレッドシートが紐付いている場合はgetActiveSpreadsheet()を使ってスプレッドシートを取得することができます。openById(id)とopenByUrl(url)はアクティブではないスプレッドシート、つまりスクリプトとスプレッドシートが紐付いていない場合に使用することができますが、アクティブなスプレッドシートの状態でも使用できます。

筆者は複数のスプレッドシートを使うことを考慮して始めからopenById(id)を使用しています。urlよりもidのほうが短いのでコードがスッキリしますからね。getActiveSpreadsheet()はスプレッドシートを1つしか使わないときには便利ですので、用途によって使い分けてみてください。

シートを取得しよう

これまではgetActiveSpreadsheetでアクティブなスプレッドシートを、openByIdとopenByUrlでアクティブではないスプレッドシートの取得方法を解説しました。ですが、スプレッドシートを取得したその先も重要です。GoogleスプレッドシートをGASで処理するためにはシートやセル、セルの値を取得することも必要になります。シートの取得はさきほどから解説しているスプレッドシートの取得方法と要領は同じなので、そちらの方法もお伝えしていきましょう。

以下で説明するアクティブではないシートの取得方法については、アクティブな状態でも取得可能です。便宜上、「アクティブではない」と表記していますので、その点ご注意ください。アクティブな状態でもシートを指定したほうがわかりやすい場合や、GAS作成後、変更の可能性がない場合などは指定して取得することをおすすめします。

また、セルやセルの値の取得方法については様々な種類があるためここでは省略しますのでご了承ください。

アクティブなシートの取得方法【getActiveSheet()】

アクティブなシートを取得する方法はとても簡単です。使用するコードは以下です。

  • var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  • var sheet = spreadsheet.getActiveSheet();

1行目でアクティブなスプレッドシートを、2行目でアクティブなシートを取得します。1行目は先述したアクティブなスプレッドシートを取得する方法と同じで、変数のspreadsheetを2行目で使用しています。スプレッドシート→シートの順で取得していきます。

2行目の変数「sheet」は任意でわかりやすいものにしてください。

では次はシートを指定して取得する方法を解説します。この方法はシートがアクティブ、アクティブではない状態にかかわらず使用することができます。

シートを指定して取得する2つの方法

シートを指定するには2つの方法があります。シート名を指定する方法と、数字を用いる方法です。1つずつ解説していきます。

  • var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  • var sheet = spreadsheet.getSheetByName(‘シート名’);

1行目のアクティブなスプレッドシートを取得する方法は変わりませんが、openById(id)やopenByUrl(url)の使用も可能です。筆者はコードの明確化と短縮化のためにopenById(id)を用いることが多いです。

2行目は「getSheetByName(‘シート名’)」を用いてシート名を指定しています。シートの名称は任意で変更可能ですが、getSheetByNameを利用する場合は、シート名を合わせる必要があります。スペースがあるだけで別のシートと認識されてしまうので注意が必要です。

もう1つの数字を用いる方法を解説します。

  • var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  • var sheet = spreadsheet.getSheets()[数字];

1行目については省略します。

2行目の「getSheets()[数字]」が変わりましたね。数字の部分にシートのインデックス番号を入力します。シートのインデックス番号とは『左から順番に0,1,2,3…』と決まっています。一番左のシートを指定する場合は「0」を指定するため注意してください。そのためシートの位置を変更した際は「getSheets()[数字]」の数字の部分も変更する必要があります。また、「getSheets」と最後にsが付いている点と数字は( )ではなく[ ]で表示する点にも注意が必要です。

まとめ

GASのgetActiveSpreadsheet()でスプレッドシートの取得方法とシートの取得方法について説明してきましたが最後に簡単にまとめておきます。

スクリプトとスプレッドシートが紐付いている(アクティブな)場合

  • var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

スクリプトとスプレッドシートが紐付いていない(アクティブではない)場合

  • var spreadsheet = SpreadsheetApp.openById(id);
  • var spreadsheet = SpreadsheetApp.openByUrl(url);

※openById(id)とopenByUrl(url)はスクリプトとスプレッドシートが紐付いている場合でも使用できます。

アクティブなシートの取得方法

  • var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  • var sheet = spreadsheet.getActiveSheet();

シートを指定して取得する方法

  • var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  • var sheet = spreadsheet.getSheetByName(‘シート名’);

もしくは

  • var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  • var sheet = spreadsheet.getSheets()[数字];

シート名を指定するか、シートのインデックス番号を数字で指定すると取得可能です。

注意点としては

  • シート名を揃える
  • インデックス番号は左から順に0,1,2,3…

以上がgetActiveSpreadsheetとそれに付随する機能でした。GASで最初につまずくかもしれない点を中心に紹介していきました。この記事が少しでもお役に立てれば幸いです。

前の記事

GASとgmaiの連携