GASのgetRangeメソッドで、セル範囲(単一・複数セル)を指定する方法

Google Apps Scriptでスプレッドシートを操作するには、以下のような4つの手順が必要です。

  1. ワークブックを指定
  2. ワークシートを指定
  3. セル範囲を指定
  4. 処理
START
STEP.1
ワークブックを指定

どのスプレッドシートを操作するか指定します。

  • var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  • var spreadsheet = SpreadsheetApp.openById(id);
  • var spreadsheet = SpreadsheetApp.openByUrl(url);
GASで操作するスプレッドシートのワークブックを指定する3つの方法
STEP.2
ワークシートを指定

どのワークシートを操作するか指定します。

  • var sheet = spreadsheet.getActiveSheet();
  • var sheet = spreadsheet.getSheetByName(name);
  • var sheet = spreadsheet.getSheets()[N-1];
GASで操作するスプレッドシートのワークシートを指定する3つの方法
STEP.3
セル範囲を指定

どのセル範囲を操作するか指定します。

  • var range = sheet.getRange(a1Notation);
  • var range = sheet.getRange(row, column [, numrows [, numcolumns]]);
GASのgetRangeメソッドで、セル範囲(単一・複数セル)を指定する方法
STEP.4
処理
値を取得/変更したり、背景色や文字色を取得/変更したり…。好き放題、いろんな処理を実行しましょう!
END

今回の記事では、ステップ3にあたるセル範囲を指定するgetRangeメソッドの使い方について紹介します。

getRangeメソッドは、ステップ4の処理を行うために欠かせないので、しっかり使い方をマスターしてください!

前提条件
function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
}

また、以降の章では、変数sheetに、GASでスプレッドシートを操作するSpreadsheetApp.Spreadsheetクラスを格納したものとして進めていきます。

getRangeメソッドの早見表
// 単一セル
sheet.getRange("B1"); // B1
sheet.getRange(1, 2); // B1

// 複数セル
sheet.getRange("B1:D3");    // B1:D3
sheet.getRange(1, 2, 4);    // B1:B4
sheet.getRange(1, 2, 3, 3); // B1:D3

getRangeメソッド

セル範囲を指定するSpreadsheetApp.SpreadsheetgetRangeメソッドには、2つの構文が存在します。

// 1.A1表記またはR1C1表記で指定する
var range = sheet.getRange(a1Notation)

// 2.数値で範囲を指定する
var range = sheet.getRange(row, column [, numrows [, numcolumns]]);
メソッド 戻り値の型 説明
Sheet.getRange(a1Notation) Range A1表記またはR1C1表記で指定したセル範囲のRangeオブジェクトを返す
Sheet.getRange(row, column [, numrows [, numcolumns]]) Range 数値で指定した範囲のRangeオブジェクトを返す

A1表記またはR1C1表記で指定する

var range = sheet.getRange(a1Notation)
パラメータ 説明
a1Notation String A1表記またはR1C1表記でセルの位置を指定する
A1表記とR1C1表記について
  • A1表記:A列1行のようにセルの位置を表記する。C2セルをA1表記で表すとC2、C2:D3セルはC2:D3
  • R1C1表記:セルの位置をRow(行)Column(列)ともに数字で表記する。C2セルをR1C1表記で表すとR2C3、C2:D3セルはR2C3:R3C4
  • 基本的にはA1表記を使用したほうが直感的に分かりやすいですが、変数を絡めて使うときにはR1C1表記が役立ちます。覚えておいて損はないです。

    サンプルコード

    A1表記またはR1C1表記で指定するサンプルプログラム
    function myFunction() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = spreadsheet.getActiveSheet();
     
     // 単一セルを指定
      var range1 = sheet.getRange("B1");
      Logger.log(range1.getA1Notation()); // B1
    
      // 複数セルを指定
      var range2 = sheet.getRange("B1:C3");
      Logger.log(range2.getA1Notation()); // B1:C3
    }
    メソッド 戻り値の型 説明
    range.getA1Notation() string 選択しているセルの範囲をA1表記で返す

    A1表記の小技

    通常であれば、変数sheetにGASで操作するワークシートを保管して、その後に変数rangeにセルの範囲を保管します。

    普通のやり方
    function myFunction() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    
      // シート2のB1セルを指定
      var sheet = spreadsheet.getSheetByName("シート2");
      var range = sheet.getRange("B1");
      Logger.log(range.getA1Notation()); // B1
    }

    しかし、A1表記を用いれば、var sheet = spreadsheet.getSheetByName("ワークシート名");としなくても、シート名を指定しそのままセル範囲を指定できるようになります。

    その際、Sheet.getRange(a1Notation)ではなく、Spreadsheet.getRange(a1Notation)を使用するので、注意が必要です。

    メソッド 戻り値の型 説明
    Spreadsheet.getRange(a1Notation) Range シート名!A1表記またはシート名!R1C1表記で指定したセル範囲のRangeオブジェクトを返す
    別のやり方
    function myFunction() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    
      // シート2のB1セルを指定
      var range = spreadsheet.getRange("シート2!B1");
      Logger.log(range.getA1Notation()); // B1
    }

    数値で指定する

    sheet.getRange(row, column [, numRows [, numColumns]]);
    パラメータ 説明
    row Integer 指定する範囲の行番号
    column Integer 指定する範囲の列番号。A列を1とする
    numRows Integer 範囲の行数を指定。デフォルト1。(省略可)
    numColumns Integer 範囲の列数を指定。デフォルト1。(省略可)

    サンプルコード

    数値で指定するサンプルプログラム
    function myFunction() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = spreadsheet.getActiveSheet();
     
     // B1セルを数値で指定
      var range1 = sheet.getRange(1, 2);
      Logger.log(range1.getA1Notation()); // B1
    
      // B1:B4セルを数値で指定
      var range2 = sheet.getRange(1, 2, 4);
      Logger.log(range2.getA1Notation()); // B1:B4
    
      // B1:D3セルを数値で指定
      var range3 = sheet.getRange(1, 2, 3, 3);
      Logger.log(range3.getA1Notation()); // B1:D3
    }

    さいごに

    今回は、SpreadsheetApp.SpreadsheetgetRangeメソッドについて紹介しました。

    getRangeメソッドは、GASを使ってスプレッドシートを操作するときに、必ずと言っていいほど使うメソッドなので、ちゃんと使えるようにしておきましょう〜。

    それでは