GAS備忘録シート・セル・範囲の取得

作成日:2020.02.10
  1. HOME
  2. 趣味のページ
  3. シート・セル・範囲の取得
タイトル:シート・セル・範囲を取得する

Google Spreadsheetでスクリプト(GAS)を組んだとしても、モバイル端末では動かないから使い道が無いと思っていました。 しかし編集イベント(onEdit)はAndroidやiOSで動くことが分かったので、使い道が一気に広がりました。onEdit()はプルダウンやチェックボックスでも発動するので結構便利に使えます。

function onEdit(e){
  //ここの処理はAndroidやiOSでも動作する
}

と言うことで、これからGoogle Apps Script(GAS)を活用する機会も増えそうなので、よく使う処理やメソッドを備忘録的に書き足していこうと思います。

  1. スプレッドシートやシートを取得する
  2. 編集されたセル(range)を取得
  3. 単独セルの取得
  4. 範囲(複数セル)の取得

スプレッドシートやシートを取得する

Spreadsheetを取得する

SpreadsheetApp.getActiveSpreadsheet()
アクティブなSpreadsheetを取得する
SpreadsheetApp.openById("キー")
別のSpreadsheetを取得する

(サンプル)

//アクティブなSpreadsheetを変数ssに格納する
var ss = SpreadsheetApp.getActiveSpreadsheet(); 

※以後、取得したスプレッドシートは「ss」で表します。

シートを取得する

ss.getActiveSheet()
アクティブなシートを取得する
ss.getSheetByName("シート名")
シート名で取得する
ss.getSheets()[数値]
数字で指定する

(サンプル)

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getActiveSheet();//アクティブなシートを取得
var sheet2 = ss.getSheetByName("data");//シート名「data」のシートを取得
var sheet3 = ss.getSheets()[0];//先頭のシートを取得

※以後取得したシートは「sheet」で表します。

編集されたセル(range)を取得

onEditで編集されたセルを取得する方法です。

e.range
編集されたセルを取得(eはonEditイベントの引数に指定されたもの)

(サンプル)

function onEdit(e){
  var range = e.range; //編集されたセルを変数rangeに格納
  range.setValue(range.getRow()); //編集されたセルの行番号を表示
}

※以後取得した単独セルは「range」で表します。

単独セルの取得

シート上の特定のセルを取得する

sheet.getRange(行,列)
行番号と列番号(アルファベットではなく数字)で取得
sheet.getRange("セル位置")
アルファベットと数字で取得

相対位置にあるセルを取得する

range.offset(行数,列数)
offsetの引数で指定した行数・列数を移動したセルを取得します。

(サンプル)

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range1 = sheet.getRange(1,2); //B1セルを取得
var range2 = sheet.getRange("A4"); //A4セルを取得
var range3 = range2.offset(-2,1); //B2セルを取得

範囲(複数セル)の取得

sheet.getRange(開始行,開始列,行数,列数)
開始セルから指定された行数・列数の範囲を取得する
取得された範囲は2次元配列に格納されます
sheet.getRange("開始セル:終了セル")
引数にセルの範囲を指定して取得する

(サンプル)

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var ranges = sheet.getRange(2,2,5,2); //B2を起点に5行×2列取得する

//ranges[0][1]はC2セルを格納
//ranges[4][0]はB6セル を格納

var cells = sheet.getRange("B2:C6"); //rangesと同じ範囲を取得している

※以後取得した範囲は「ranges」で表します。

data-matched-content-rows-num="4,2" data-matched-content-columns-num="1,3" data-matched-content-ui-type="image_stacked,image_card_sidebyside">