今回はGASのgetRangeメソッドを使ってスプレッドシートの範囲を選択する方法をご紹介します。
getRangeメソッドはかなり使用頻度が高く、スプレッドシートで行う作業を自動化するためには必須と言っても過言ではありません。
最初は混乱するかもしれませんが、ぜひ何度もアウトプットして覚えてください。
セルの範囲を指定する方法には2種類ある
getRangeメソッドを使用する上で一番のポイントは、セルの範囲指定方法には「大きく分けて2種類ある」ということです。
- A1表記で指定する方法
- 行番号・列番号を指定する方法
それぞれ一長一短ありますが、個人的な所感で言えばこんな感じです。
- A1表記:簡単だけど応用性は低い
- 行番号・列番号:少し複雑だけど応用性が高い
私はA1表記から始めて、今では行番号、列番号を指定する方法を使っています。
この進め方が正しいというわけではありませんが、1つの参考としてください。
ではそれぞれどのように記述していくかをご紹介します。
A1表記で指定する方法
A1表記はセルの範囲を「A1」「B3」のように指定する方法です。
スプレッドシート上で関数を組む時と同じですね。
スプレッドシートで日常的に関数を組んでいた方はこちらの方法が馴染み深いのではないでしょうか。
A1表記はスクリプトの仕様変更時にコードを書き直さないといけないことも多く、汎用性が少し低いです。
しかし直感的に理解しやすいという面もあるので、GAS初心者の方はこちらの記述方式から始めてみるといいでしょう。
A1表記で1つのセルを指定する方法
A1表記で1つのセルを指定する場合の記述は下記のようになります。
getRange(‘セル名’)
例えば「Target_sheet」というシートのA1セルを指定する場合は下記のように記述します。
function select(){
//スクリプトファイルに紐づけられたスプレッドシートのファイルを読み込む
var spreadsheet = SpreadsheetApp.getActive();
//対象のシートを読み込む
var sheet = spreadsheet.getSheetByName(‘Target_sheet’);
//A1セルを選択する
var targetCell = sheet.getRange(‘A1’)
}
また、下記のようにシート名も含めて一気に記述することも可能です。
function select(){
//スクリプトファイルに紐づけられたスプレッドシートのファイルを読み込む
var spreadsheet = SpreadsheetApp.getActive();
//対象のシートのA1セルを選択する
var targetCell = sheet.getRange(‘Target_sheet!A1’)
}
こちらの記述方法はよりスプレッドシートの関数に近いですね。
応用として、セル名を変数化することもできます。
function select(){
//スクリプトファイルに紐づけられたスプレッドシートのファイルを読み込む
var spreadsheet = SpreadsheetApp.getActive();
//対象のシートを読み込む
var sheet = spreadsheet.getSheetByName(‘Target_sheet’);
var cell = 1;
//A1セルを選択する
var targetCell = sheet.getRange(‘A’ + cell);
}
変数化することでより拡張性の高いスクリプトを組むことができます。
A1表記でセル範囲を指定する方法
A1表記でセルの範囲を指定する場合の記述は下記のようになります。
getRange(‘セル範囲’)
例えば「Target_sheet」というシートのA1:B2のセル範囲を指定する場合は下記のように記述します。
function select(){
//スクリプトファイルに紐づけられたスプレッドシートのファイルを読み込む
var spreadsheet = SpreadsheetApp.getActive();
//対象のシートを読み込む
var sheet = spreadsheet.getSheetByName(‘Target_sheet’);
//A1:B2セルを選択する
var targetCell = sheet.getRange(‘A1:B2’)
}
こちらの記述方法もスプレッドシートの関数と同じですね。
範囲指定の場合も1つのセルを指定した時と同様に、シート名を含めて記述することも、一部を変数化することもできます。
行番号・列番号で指定する方法
行番号、列番号で指定する方法ではセルの座標を数値で記述します。
例えば
- A1セルは「1行目」の「1列目」なので「1, 1」
- B1セルは「1行目」の「2列目」なので「1, 2」
となります。
A1表記の場合は1つのセルを指定する方法と、セル範囲を指定する方法の合計2パターンの記述方法がありましたが、
行番号・列番号で指定する場合は、1つのセルを指定する方法が1パターンと、セル範囲を指定する方法が2パターンの、合計3パターンの記述方法があります。
行番号・列番号で1つのセルを指定する方法
行番号・列番号で1つのセルを指定する場合は下記のように記述します。
getRange(行番号,列番号)
例えば「Target_sheet」というシートのA1セルを指定する場合は下記のように記述します。
function select(){
//スクリプトファイルに紐づけられたスプレッドシートのファイルを読み込む
var spreadsheet = SpreadsheetApp.getActive();
//対象のシートを読み込む
var sheet = spreadsheet.getSheetByName(‘Target_sheet’);
//A1セルを選択する
var targetCell = sheet.getRange(1, 1);
}
A1表記の場合と同様に、行番号・列番号をそれぞれ変数化することもできます。
function select(){
//スクリプトファイルに紐づけられたスプレッドシートのファイルを読み込む
var spreadsheet = SpreadsheetApp.getActive();
//対象のシートを読み込む
var sheet = spreadsheet.getSheetByName(‘Target_sheet’);
//行番号
var row = 1;
//列番号
var col = 1;
//A1セルを選択する
var targetCell = sheet.getRange(row, col);
}
A1表記と違って列番号も変数化することができるので、かなり柔軟性が上がります。
行番号・列番号で縦方向にセル範囲を指定する方法
スプレッドシート上で単一の列のセル範囲を指定する場合は下記のように記述します。
getRange(行番号,列番号,行数)
例えばA列の1行目から5行目までを指定する場合は下記のように記述します。
function select(){
//スクリプトファイルに紐づけられたスプレッドシートのファイルを読み込む
var spreadsheet = SpreadsheetApp.getActive();
//対象のシートを読み込む
var sheet = spreadsheet.getSheetByName(‘Target_sheet’);
//A1セルを選択する
var targetCell = sheet.getRange(1, 1, 5);
}
個人的にはあまり使用しない記述方式ですが、1列分のデータしか取り扱わない場合は範囲を指定する際の記述ミス防止につながるので、覚えておいて損はないでしょう。
行番号・列番号でセル範囲を指定する方法
スプレッドシート上で単一の列のセル範囲を指定する場合は下記のように記述します。
getRange(行番号,列番号,行数,列数)
例えばA1:E6のセル範囲を指定する場合は下記のように記述します。
function select(){
//スクリプトファイルに紐づけられたスプレッドシートのファイルを読み込む
var spreadsheet = SpreadsheetApp.getActive();
//対象のシートを読み込む
var sheet = spreadsheet.getSheetByName(‘Target_sheet’);
//A1セルを選択する
var targetCell = sheet.getRange(1, 1, 5,,6);
}
A1表記の範囲指定との最大の違いは
- A1表記では範囲の一番左上のセル座標と一番右下のセル座標を直接記述
- 行番号・列番号で範囲指定する場合は一番左上のセルの行番号と列番号を記載し、そこから何行・何列範囲指定するのかを記述
という点になります。
最初はややこしく感じるかもしれませんが、慣れてくると二次元配列のデータを取り扱う場合はlengthメソッドで行数と列数を取得できるので、この記述方式の方が楽に感じます。
【番外編】値が存在するセル範囲を指定する方法
任意の指定にはなりませんが、シート上で値が存在するセル範囲を指定する方法もご紹介します。
下記のように記述をします。
getDataRange()
実際のスクリプトではこのようになります。
function select(){
//スクリプトファイルに紐づけられたスプレッドシートのファイルを読み込む
var spreadsheet = SpreadsheetApp.getActive();
//対象のシートを読み込む
var sheet = spreadsheet.getSheetByName(‘Target_sheet’);
//値が存在するセル範囲を選択する
var targetCell = sheet.getDataRange();
}
行番号や列番号、行数、列数を記載する必要がないので非常に記述が楽で済みます。
ただ、値が存在するセルとセルの間に空白のセルがあったらその空白セルも範囲選択されてしまうので、処理にちょっとコツが必要だったりします。
もちろんスクリプトで空白のセルの情報を除外しても良いのですが、できればスプレッドシートへデータ入力する際のルールを作り、できるだけ空白のセルが発生しないデータ環境を作るのをおすすめします。
まとめ・終わりに
今回はgetRangeメソッドを使ってセル指定する際の記述方法についてご紹介しました。
注意点としてはA1表記で記述する際は必ず「”(クォート)」でセル範囲を囲うことです。
「A1:B2」などのA1表記はGASのシステム上ではSTRING型として認識されるので、クォートで囲わないとエラーが出てしまいます。
行番号・列番号を指定して記述する方法は私も最初かなり手こずった思い出がありますが、慣れてしまった今となっては A1表記よりもスクリプトのメンテナンス工数が少なかったり、拡張性が高いので重宝しています。
ぜひ何度もアウトプットを繰り返して記述方法をマスターしてください。
コメント