【GAS】スクリプトエディタからワークブック、ワークシート、セル範囲を取得してみよう

gas

みなさんこんにちは。zak-papaです。

前回はGASの開発環境(スクリプトエディタ)の開き方から初めてのプログラムを実行するところまで説明しました。

gas【GAS】開発環境(スクリプトエディタ)を開いて初めてのプログラムを実行してみよう

 

今回は、「ワークブック」「ワークシート」「セル範囲」の取得方法についてお伝えします。
※ 「セル」の値の取得や入力は次回説明します。

GASで「スプレッドシート」を操作するには、次の3ステップを踏む必要があります。

GASで「スプレッドシート」を操作するための3ステップ
  1. ワークブックの取得(指定)
  2. ワークシートの取得(指定)
  3. セル範囲の取得(指定)

 

つまり、

①どのワークブックの、
②どのワークシートの、
③どのセルに対して処理するか
  をまずは取得(指定)しなければ始まりません。

 

この流れと取得方法についてはしっかりと頭に入れておきましょう。3ステップを踏むことでようやくGASで「スプレッドシート」を操作することができます。

Google_スプレッドシート

 

それでは、「ワークブック」の取得から順に見ていきましょう。

 

「ワークブック」を取得してみよう

まずは「ワークブック(スプレッドシート)」を取得してみましょう。ワークブックの取得方法は3パターンあります。

ワークブックの取得方法
  1. 「アクティブ」なワークブックを取得
  2. 「ID」でワークブックを取得(URLの「/d」と「/edit」の間)
  3. 「URL」でワークブックを取得(https://docs.google.com/spreadsheets/…)

 

Google_スプレッドシート

 

 

 

「アクティブ」なワークブックを取得

アクティブなワークブックを取得するときに使うのが、「SpreadsheetApp」クラスの「getActiveSpreadsheet()」メソッドです。「アクティブ」とは、今開いているスプレッドシートで操作可能な状態になっているものをいいます。

SpreadsheetApp.getActiveSpreadsheet()

 

では、アクティブなワークブックを取得(変数「spreadsheet」に代入)し、そのワークブック名である「初めてのGAS」をログに出力してみましょう。
ちなみに「getName()」メソッドは「スプレッドシート名」を取得するメソッドです。

getActiveSpreadsheet

 

 

ログに「初めてのGAS」と出力されましたね。

 

 

注意

「アクティブ」なワークブックを取得する方法は、前回の記事の1つ目の開き方であった「コンテナバインドスクリプト」でしか使用できません。

「コンテナバインドスクリプト」は、スプレッドシートからスクリプトエディタを開くため、親ファイル(スプレッドーシート)と既に紐付けがされているものであり、その親ファイルが「アクティブ」なワークブックになります。

理解が曖昧な場合は前回の記事で確認してみましょう。

gas【GAS】開発環境(スクリプトエディタ)を開いて初めてのプログラムを実行してみよう

 

 

また、「スタンドアロンスクリプト」の場合は、Googleドライブから直接スクリプトエディタを開くため、親ファイル(スプレッドシート)と紐付けがされていません。なので、ワークブックを取得する場合は②の「ID」、③の「URL」を使って取得することになります。

 

 

「ID」でワークブックを取得

続いて、「ID」でワークブックを取得するときに使うのが「SpreadsheetApp」クラスの「openById()」メソッドです。引数に「ID」を渡してあげます。

SpreadsheetApp.openById("スプレッドシートのID")

 

スプレッドシートの「ID」は下図の青枠(「d/」と「/edit」の間)になります。
また「URL」は赤枠になります。

Google_スプレッドシート

 

「ID」からワークブックを取得して、先ほどと同じように「初めてのGAS」とワークブック名をログに出力してみましょう。
変数「id」にスプレッドシートのIDを格納した上で出力しています。

IDで取得

 

 

こちらも同じように「初めてのGAS」と出力されましたね。

 

 

「URL」でワークブックを取得

最後に、「URL」でワークブックを取得するときに使うのが「SpreadsheetApp」クラスの「openByUrl()」メソッドです。引数に「URL」を渡してあげます。
「ID(Id)」が「URL(Url)」に変わっただけなのでわかりやすいですね。

SpreadsheetApp.openByUrl("スプレッドシートのURL")

 

スプレッドシートの「URL」は赤枠になります。

Google_スプレッドシート

 

「URL」からワークブックを取得して、先ほどと同じように「初めてのGAS」とワークブック名をログに出力してみましょう。
変数「url」にスプレッドシートのURLを格納した上で出力しています。

URLで取得

 

 

先ほどもお伝えした通り、「スタンドアロンスクリプト」の場合は②の「ID」、③の「URL」を使って取得するのでしっかりと2つの使い方を理解しておきましょう。

 

 

「ワークシート」を取得してみよう

次に「ワークシート」を取得してみましょう。ワークシートの取得方法も3パターンあります。

ワークシートの取得方法
  1. 「アクティブ」なワークシートを取得
  2. 「シート名」でワークシートを取得
  3. 「インデックス」で配列からワークシートを取得

 

 

 

「アクティブ」なワークシートを取得

アクティブなワークシートを取得するときに使うのが、「SpreadsheetApp」クラスの「getActiveSheet()」メソッドです。

SpreadsheetApp.getActiveSheet()

 

では、今開いているワークシートを取得(変数「sheet」に代入)し、そのワークシート名である「シート1」をログに出力してみましょう。「シート名」を取得する場合も「getName()」メソッドを使います。

getActiveSheet

 

ログに「シート1」が出力されましたね。

 

注意

こちらも「コンテナバインドスクリプト」でしか使用できません。「アクティブ」とついたら、「コンテナ」と思っておけば良いでしょう。

また、「シート」が2つ以上ある場合にスクリプト側から見てどの「シート」が「アクティブ」なのか分かりにくいといったこともあります。
なので、「シート」が1つの場合に使用するのが良いでしょう。

 

アクティブなシート

 

 

 

「シート名」でワークシートを取得

続いて「シート名」でワークシートを取得するときに使うのが、「Spreadsheet」クラスの「getSheetByName()」メソッドです。引数に「シート名」を渡してあげます。

Spreadsheet.getSheetByName("ワークシート名")

※ 以降、「コンテナバインドスクリプト」で「アクティブ」なワークブックを取得した上で説明します。

 

では、一番左のシートである「シート1」をログに出力してみましょう。

先ほどと異なり、ワークブックをまずは取得(変数「spreadsheet」に格納)し、その上でワークシートを取得(変数「sheet」に格納)して出力しています。(後述の「補足」を参照)

getSheetByName

 

こちらもログに「シート1」が出力されました。

 

補足

①の「アクティブ」なワークシートを取得する場合は、「SpreadsheetApp」クラスから直接「ワークシート」を取得できました。
しかし、②や③の方法でワークシートを取得する場合は、「SpreadsheetApp」クラス」→「Spreadsheet」クラス →「ワークシート」と、一度「ワークブック」の取得を挟んで「ワークシート」を取得します。

 

 

これも①の「アクティブ」なものを取得できるのが「コンテナバインドスクリプト」であり、親ファイルが紐づいているから「スプレッドシート(ワークブック)」を取得しなくても直接シートを取得できるということですね。

 

注意

「シート名」でワークシートを取得した場合、「シート名」を変更すると取得できなくなってしまうのでご注意ください。

 

 

「インデックス」でワークシートを取得

最後に「インデックス」で配列からワークシートを取得するときに使うのが、「Spreadsheet」クラスの「getSheets()」メソッドです。

Spreadsheet.getSheets()

 

「getSheets」メソッドは、一番左にある「シート」のインデックスを「0」として順に「右」へ配列に格納していくので、取り出すときはsheets[0], sheets[1]のように「[ ](角括弧)」を用いて取得します。

インデックス

 

配列の操作方法について理解が曖昧な場合はこちらからご確認ください。

GAS【GAS】JavaScript基本⑤ 〜 複数の値を扱う「配列」「オブジェクト」を理解しよう

 

 

では、上記2つのシートを取得してみましょう。「シート」が1つしかない場合は、「シート」を増やしてから試してみてください。

getSheets

 

「シート名」がそれぞれ出力されましたね。

 

 

「セル範囲」を取得してみよう

最後に「セル範囲」を取得してみましょう。セル範囲の取得方法も3パターンあります。

セル範囲の取得方法
  1. 「アドレス」でセル範囲を取得(A1表記)
  2. 「行・列番号」でセル範囲を取得(R1C1表記)
  3. 「自動」でセル範囲を取得

 

 

 

「アドレス」でセル範囲を取得(A1表記)

セル範囲を取得するときに使うのが、「Sheet」クラスの「getRange()」メソッドです。

「A1」「B1:C3(複数)」のようにセル範囲のアドレスを「文字列」で渡して取得することができます。(A1表記)
文字列なので「"A1"」のように「クォーテーション」で囲むのを忘れないようにしましょう。

Sheet.getRange("セル範囲")  ※A1表記

 

 

では、実際に「セル」を取得してみましょう。

ちなみに「getA1Notation()」メソッドはセル範囲のアドレスを「A1表記」で取得するメソッドです。
「2:2(2行目)」「C:C(C列)」のように「行全体」「列全体」も取得することができます。

getRange

 

ログに「セル範囲」が出力されました。

 

 

「行・列番号」でセル範囲を取得(R1C1表記)

「行・列番号(R1C1表記)」でも同様に、「Sheet」クラスの「getRange()」メソッドでセル範囲を取得することができます。

こちらは、次のように「getRange()」メソッドの引数に、①行番号、②列番号、③行数(省略可)、④列数(省略可)を指定してセル範囲を取得します。
 ※ ③行数、④列数を省略する場合は「1」になります。

Sheet.getRange ( 行番号,  列番号,  ( 行数 ),  ( 列数 ) )  ※R1C1表記

 

 

では、実際にR1C1表記で「セル」を取得してみましょう。

1つ目は「(1, 1)」で「A1」を表しています。
2つ目は「(1, 1, 3)」と「3つ」指定しており、「A1」から3つ行数分(下に3行)進んだ「A1〜A3」まで取得しています。
3つ目は「(1, 2, 3, 2)」と「4つ」指定しており、「B1」から3つ行数分(下に3行)進み、2つ列数分(右に2列)進んだ「B1〜C3」まで取得しています。

getRange_R1C1

 

補足

R1C1表記でセル範囲を取得する場合は、①行番号、②列番号で「起点となるセル」を表し、そこから「③(行数)にどれだけいくか」、「④(列数)にどれだけいくか」といった感じでセル範囲を指定していけばいいですね。

 

getRangeメソッド

 

 

 

「自動」でセル範囲を取得

これまで見てきた2つの取得方法は「A1」や「1,2」のようにセルを指定して取得してきました。

最後の取得方法はセル範囲を「自動」で取得することができる「Sheet」クラスの「getDataRange()」メソッドです。「自動」って響きがいいですね。

Sheet.getDataRange ()  ※自動で取得

 

 

つまり、シート上にデータがあるかを判別してその存在しているデータ範囲を自動で取得してくれます。データ範囲が「動的」な場合に活躍するメソッドなのでこちらもしっかりと覚えておきましょう。

では、こちらのデータ範囲を自動で取得してみます。

getDataRangeメソッド

 

 

データが入っていないと取得できないため、次のコードをコピペして実行し、データがある状態にしてから取得してみましょう。もちろんご自身で自由に入力したものでも構いません。

コードはこちら。今の段階ではコードの意味はわからなくても大丈夫です。次回の記事で説明します。

 

 

入力ができたら、セル範囲を自動で取得してみましょう。

getDataRange

 

無事「データ範囲(A1〜D4)」を自動で取得してくれましたね。

 

注意

「getDataRange」メソッドは、「A1」からデータがある「最終行」「最終列」までを自動で取得してくれるメソッドです。
なので、A列を空けてデータを入力しているような場合は、正しくデータ取得ができないことになるためA1からデータ入力を行うようにしましょう。
この場合、ログ上で「A1:E4」と表示がされます。

 

getDataRangeメソッド

 

getDataRange_A1_E4

 

 

 

最後に、データが存在する「最終行」「最終列」の行番号、列番号を取得する「getLastRow()」メソッド、「getLastColumn()」メソッドも見ておきましょう。

こちらもデータが「動的」な場合にその都度指定する必要がなくなるので、是非覚えておきましょう。

getLastRow_getLastColumn

 

 

終わりに

以上、「スクリプトエディタ」から「ワークブック」「ワークシート」「セル範囲」を取得する方法についてお伝えしました。

これらの操作は、スプレッドシート操作の基本中の基本となります。
取得できないと何も操作できないので、分からない箇所はしっかりと復習しておきましょう。

 

今回はセルの「範囲」の取得まで説明しましたので、次回はセルの「値」の取得や入力について説明していきたいと思います。

PC【GAS】スクリプトエディタからセルの値の取得や入力など基本的な操作をしてみよう

 

 

以上となります。最後まで読んでいただきありがとうございました!