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

今回は、「ワークブック」「ワークシート」「セル範囲」の取得方法についてお伝えします。
※ 「セル」の値の取得や入力は次回説明します。
GASで「スプレッドシート」を操作するには、次の3ステップを踏む必要があります。
- ワークブックの取得(指定)
- ワークシートの取得(指定)
- セル範囲の取得(指定)
つまり、
①どのワークブックの、
②どのワークシートの、
③どのセルに対して処理するか をまずは取得(指定)しなければ始まりません。
この流れと取得方法についてはしっかりと頭に入れておきましょう。3ステップを踏むことでようやくGASで「スプレッドシート」を操作することができます。
それでは、「ワークブック」の取得から順に見ていきましょう。
目次
「ワークブック」を取得してみよう
まずは「ワークブック(スプレッドシート)」を取得してみましょう。ワークブックの取得方法は3パターンあります。
- 「アクティブ」なワークブックを取得
- 「ID」でワークブックを取得(URLの「/d」と「/edit」の間)
- 「URL」でワークブックを取得(https://docs.google.com/spreadsheets/…)
1 2 3 4 5 6 7 8 9 10 |
// ① 「アクティブ」なワークブックを取得する var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // ② 「ID」でワークブックを取得する var id = "スプレッドシートのID"; // URLの「/d」と「/edit」の間 var spreadsheet = SpreadsheetApp.openById(id); // ③ 「URL」でワークブックを取得する var url = "スプレッドシートのURL"; // https://docs.google.com/spreadsheets/… var spreadsheet = SpreadsheetApp.openByUrl(url); |
「アクティブ」なワークブックを取得
アクティブなワークブックを取得するときに使うのが、「SpreadsheetApp」クラスの「getActiveSpreadsheet()」メソッドです。「アクティブ」とは、今開いているスプレッドシートで操作可能な状態になっているものをいいます。
では、アクティブなワークブックを取得(変数「spreadsheet」に代入)し、そのワークブック名である「初めてのGAS」をログに出力してみましょう。
ちなみに「getName()」メソッドは「スプレッドシート名」を取得するメソッドです。
1 2 3 4 5 6 7 8 |
function getWorkbook() { // アクティブなワークブックを取得する var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); Logger.log(spreadsheet.getName()); // 初めてのGAS } |
ログに「初めてのGAS」と出力されましたね。
「アクティブ」なワークブックを取得する方法は、前回の記事の1つ目の開き方であった「コンテナバインドスクリプト」でしか使用できません。
「コンテナバインドスクリプト」は、スプレッドシートからスクリプトエディタを開くため、親ファイル(スプレッドーシート)と既に紐付けがされているものであり、その親ファイルが「アクティブ」なワークブックになります。
理解が曖昧な場合は前回の記事で確認してみましょう。

また、「スタンドアロンスクリプト」の場合は、Googleドライブから直接スクリプトエディタを開くため、親ファイル(スプレッドシート)と紐付けがされていません。なので、ワークブックを取得する場合は②の「ID」、③の「URL」を使って取得することになります。
「ID」でワークブックを取得
続いて、「ID」でワークブックを取得するときに使うのが「SpreadsheetApp」クラスの「openById()」メソッドです。引数に「ID」を渡してあげます。
スプレッドシートの「ID」は下図の青枠(「d/」と「/edit」の間)になります。
また「URL」は赤枠になります。
「ID」からワークブックを取得して、先ほどと同じように「初めてのGAS」とワークブック名をログに出力してみましょう。
変数「id」にスプレッドシートのIDを格納した上で出力しています。
1 2 3 4 5 6 7 8 9 |
function getWorkbook() { // ② 「ID」でワークブックを取得する var id = "スプレッドシートのID"; var spreadsheet = SpreadsheetApp.openById(id); Logger.log(spreadsheet.getName()); } |
こちらも同じように「初めてのGAS」と出力されましたね。
「URL」でワークブックを取得
最後に、「URL」でワークブックを取得するときに使うのが「SpreadsheetApp」クラスの「openByUrl()」メソッドです。引数に「URL」を渡してあげます。
「ID(Id)」が「URL(Url)」に変わっただけなのでわかりやすいですね。
スプレッドシートの「URL」は赤枠になります。
「URL」からワークブックを取得して、先ほどと同じように「初めてのGAS」とワークブック名をログに出力してみましょう。
変数「url」にスプレッドシートのURLを格納した上で出力しています。
1 2 3 4 5 6 7 8 9 |
function getWorkbook() { // ③ 「URL」でワークブックを取得する var url = "スプレッドシートのURL"; var spreadsheet = SpreadsheetApp.openByUrl(url); Logger.log(spreadsheet.getName()); } |
先ほどもお伝えした通り、「スタンドアロンスクリプト」の場合は②の「ID」、③の「URL」を使って取得するのでしっかりと2つの使い方を理解しておきましょう。
「ワークシート」を取得してみよう
次に「ワークシート」を取得してみましょう。ワークシートの取得方法も3パターンあります。
- 「アクティブ」なワークシートを取得
- 「シート名」でワークシートを取得
- 「インデックス」で配列からワークシートを取得
1 2 3 4 5 6 7 8 9 10 11 |
// ① 「アクティブ」なワークシートを取得する var sheet = SpreadsheetApp.getActiveSheet(); // ② 「シート名」でワークシートを取得する var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('シート1'); // ③ 「インデックス」で配列からワークシートを取得する var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheets = spreadsheet.getSheets(); // ※ sheets[0]のように指定 |
「アクティブ」なワークシートを取得
アクティブなワークシートを取得するときに使うのが、「SpreadsheetApp」クラスの「getActiveSheet()」メソッドです。
では、今開いているワークシートを取得(変数「sheet」に代入)し、そのワークシート名である「シート1」をログに出力してみましょう。「シート名」を取得する場合も「getName()」メソッドを使います。
1 2 3 4 5 6 7 8 |
function getWorksheet() { // アクティブなワークシートを取得する var sheet = SpreadsheetApp.getActiveSheet(); Logger.log(sheet.getName()); } |
ログに「シート1」が出力されましたね。
「シート名」でワークシートを取得
続いて「シート名」でワークシートを取得するときに使うのが、「Spreadsheet」クラスの「getSheetByName()」メソッドです。引数に「シート名」を渡してあげます。
※ 以降、「コンテナバインドスクリプト」で「アクティブ」なワークブックを取得した上で説明します。
では、一番左のシートである「シート1」をログに出力してみましょう。
先ほどと異なり、ワークブックをまずは取得(変数「spreadsheet」に格納)し、その上でワークシートを取得(変数「sheet」に格納)して出力しています。(後述の「補足」を参照)
1 2 3 4 5 6 7 8 9 |
function getWorksheet() { // 「シート名」でワークシートを取得する var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('シート1'); Logger.log(sheet.getName()); } |
こちらもログに「シート1」が出力されました。
①の「アクティブ」なワークシートを取得する場合は、「SpreadsheetApp」クラスから直接「ワークシート」を取得できました。
しかし、②や③の方法でワークシートを取得する場合は、「SpreadsheetApp」クラス」→「Spreadsheet」クラス →「ワークシート」と、一度「ワークブック」の取得を挟んで「ワークシート」を取得します。
1 2 3 4 5 6 7 |
// ① 「アクティブ」なワークシートを取得する(直接ワークシートを取得) var sheet = SpreadsheetApp.getActiveSheet(); // ② 「シート名」でワークシートを取得する(一度ワークブックを取得してからワークシートを取得) var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('シート1'); |
これも①の「アクティブ」なものを取得できるのが「コンテナバインドスクリプト」であり、親ファイルが紐づいているから「スプレッドシート(ワークブック)」を取得しなくても直接シートを取得できるということですね。
「シート名」でワークシートを取得した場合、「シート名」を変更すると取得できなくなってしまうのでご注意ください。
「インデックス」でワークシートを取得
最後に「インデックス」で配列からワークシートを取得するときに使うのが、「Spreadsheet」クラスの「getSheets()」メソッドです。
「getSheets」メソッドは、一番左にある「シート」のインデックスを「0」として順に「右」へ配列に格納していくので、取り出すときはsheets[0], sheets[1]のように「[ ](角括弧)」を用いて取得します。
配列の操作方法について理解が曖昧な場合はこちらからご確認ください。

では、上記2つのシートを取得してみましょう。「シート」が1つしかない場合は、「シート」を増やしてから試してみてください。
1 2 3 4 5 6 7 8 9 10 |
function getWorksheet() { // 「インデックス」で配列からワークシートを取得する var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheets = spreadsheet.getSheets(); Logger.log(sheets[0].getName()); // シート1 Logger.log(sheets[1].getName()); // シート2 } |
「シート名」がそれぞれ出力されましたね。
「セル範囲」を取得してみよう
最後に「セル範囲」を取得してみましょう。セル範囲の取得方法も3パターンあります。
- 「アドレス」でセル範囲を取得(A1表記)
- 「行・列番号」でセル範囲を取得(R1C1表記)
- 「自動」でセル範囲を取得
1 2 3 4 5 6 7 8 9 10 11 12 |
var sheet = SpreadsheetApp.getActiveSheet(); // ① 「アドレス」でセル範囲を取得する sheet.getRange("A1").getA1Notation()); sheet.getRange("B1:C3").getA1Notation()); // ② 「行・列番号」でセル範囲を取得する sheet.getRange(1, 1).getA1Notation()); // A1 sheet.getRange(1, 2, 3, 2).getA1Notation()); // B1:C3 // ③ 「自動」でセル範囲を取得する sheet.getDataRange().getA1Notation()); |
「アドレス」でセル範囲を取得(A1表記)
セル範囲を取得するときに使うのが、「Sheet」クラスの「getRange()」メソッドです。
「A1」や「B1:C3(複数)」のようにセル範囲のアドレスを「文字列」で渡して取得することができます。(A1表記)
文字列なので「"A1"」のように「クォーテーション」で囲むのを忘れないようにしましょう。
では、実際に「セル」を取得してみましょう。
ちなみに「getA1Notation()」メソッドはセル範囲のアドレスを「A1表記」で取得するメソッドです。
「2:2(2行目)」「C:C(C列)」のように「行全体」「列全体」も取得することができます。
1 2 3 4 5 6 7 8 9 10 11 12 |
function getCellRange() { var sheet = SpreadsheetApp.getActiveSheet(); // アドレスでセル範囲を取得する(A1表記) Logger.log(sheet.getRange("A1").getA1Notation()); // A1 Logger.log(sheet.getRange("B1:C3").getA1Notation()); // B1:C3 Logger.log(sheet.getRange("2:2").getA1Notation()); // 2:2(行全体) Logger.log(sheet.getRange("C:C").getA1Notation()); // C:C(列全体) } |
ログに「セル範囲」が出力されました。
「行・列番号」でセル範囲を取得(R1C1表記)
「行・列番号(R1C1表記)」でも同様に、「Sheet」クラスの「getRange()」メソッドでセル範囲を取得することができます。
こちらは、次のように「getRange()」メソッドの引数に、①行番号、②列番号、③行数(省略可)、④列数(省略可)を指定してセル範囲を取得します。
※ ③行数、④列数を省略する場合は「1」になります。
では、実際に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」まで取得しています。
1 2 3 4 5 6 7 8 9 10 |
function getCellRange() { var sheet = SpreadsheetApp.getActiveSheet(); // 行・列番号でセル範囲を取得する(R1C1表記) Logger.log(sheet.getRange(1, 1).getA1Notation()); // A1 Logger.log(sheet.getRange(1, 1, 3).getA1Notation()); // A1:A3 Logger.log(sheet.getRange(1, 2, 3, 2).getA1Notation()); // B1:C3 } |
R1C1表記でセル範囲を取得する場合は、①行番号、②列番号で「起点となるセル」を表し、そこから「③(行数)下にどれだけいくか」、「④(列数)右にどれだけいくか」といった感じでセル範囲を指定していけばいいですね。
「自動」でセル範囲を取得
これまで見てきた2つの取得方法は「A1」や「1,2」のようにセルを指定して取得してきました。
最後の取得方法はセル範囲を「自動」で取得することができる「Sheet」クラスの「getDataRange()」メソッドです。「自動」って響きがいいですね。
つまり、シート上にデータがあるかを判別してその存在しているデータ範囲を自動で取得してくれます。データ範囲が「動的」な場合に活躍するメソッドなのでこちらもしっかりと覚えておきましょう。
では、こちらのデータ範囲を自動で取得してみます。
データが入っていないと取得できないため、次のコードをコピペして実行し、データがある状態にしてから取得してみましょう。もちろんご自身で自由に入力したものでも構いません。
コードはこちら。今の段階ではコードの意味はわからなくても大丈夫です。次回の記事で説明します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function getCellRange() { // セルの範囲を取得 var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange("A1:D4"); // 入力する値を変数「values」に代入 var values = [ ['買うもの', '単価', '個数', '金額'], ['ビール', 100, 1, '=B2*C2'], ['チーズ', 150, 2, '=B3*C3'], ['唐揚げ', 200, 3, '=B4*C4'], ]; // 取得したセル範囲に一括で入力 range.setValues(values); } |
入力ができたら、セル範囲を自動で取得してみましょう。
1 2 3 4 5 6 7 8 |
function getCellRange() { var sheet = SpreadsheetApp.getActiveSheet(); // 自動でセル範囲を取得する Logger.log(sheet.getDataRange().getA1Notation()); // A1:D4 } |
無事「データ範囲(A1〜D4)」を自動で取得してくれましたね。
最後に、データが存在する「最終行」「最終列」の行番号、列番号を取得する「getLastRow()」メソッド、「getLastColumn()」メソッドも見ておきましょう。
こちらもデータが「動的」な場合にその都度指定する必要がなくなるので、是非覚えておきましょう。
1 2 3 4 5 6 7 8 9 |
function getCellRange() { var sheet = SpreadsheetApp.getActiveSheet(); // データの最終行、最終列を取得する Logger.log(sheet.getDataRange().getLastRow()); // 4 (最終行:4行目) Logger.log(sheet.getDataRange().getLastColumn()); // 4 (最終列:D列) } |
終わりに
以上、「スクリプトエディタ」から「ワークブック」「ワークシート」「セル範囲」を取得する方法についてお伝えしました。
これらの操作は、スプレッドシート操作の基本中の基本となります。
取得できないと何も操作できないので、分からない箇所はしっかりと復習しておきましょう。
今回はセルの「範囲」の取得まで説明しましたので、次回はセルの「値」の取得や入力について説明していきたいと思います。

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