「google apps script アクティブではないシート」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
GAS(Google Apps Script)では、
var sh
= SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
或いは、
var bk = SpreadsheetApp.getActiveSpreadsheet();
var sh = bk.getActiveSheet();
のようにSpreadsheet.getActiveSheet()メソッドを使って、アクティブなシートを取得することができます。
「google apps script アクティブではないシート」
という検索をなさった方は、おそらくこのことはご存知で、逆にアクティブになっていないシートを取得したい場合には、どのようなコードを書けばいいのかを探していらしたのでしょう。
シート名を指定してSheetを取得するサンプルスクリプト
シート名からシートを取得する場合は、以下のようなコードです。
var bk = SpreadsheetApp.getActiveSpreadsheet();
var sh = bk.getSheetByName("sample");
if(sh != null){
Browser.msgBox(sh.getRange("A1").getValue());
}
上記のスクリプトを実行すると「sample」という名前のシートのA1セルの値がメッセージボックスに表示されます。
変数・shに格納を行っている、
var sh = bk.getSheetByName("sample");
が、アクティブではないシートを取得している箇所です。
SpreadsheetクラスのgetSheetByName()メソッドで、シート名を使ってシートを取得できます。(getSheetByNameというそのままの名前のついたメソッドです)
Spreadsheet.getSheetByName()メソッドは、引数に指定された名前のシートが見つからなかったときにはnullを返してくるので、メッセージボックスにA1セルの値を表示する処理をif文で括っています。
if(sh != null){
Browser.msgBox(sh.getRange("A1").getValue());
}
全シートを配列で取得してインデックスを指定してSheetを取得するサンプルスクリプト
シートの名前ではなく、何枚目のシートかを指定してシートを取得したい場合は、以下のようなスクリプトです。
var bk = SpreadsheetApp.getActiveSpreadsheet();
var arr_sh = bk.getSheets();
Browser.msgBox(arr_sh[0].getRange("A1").getValue());
}上記のスクリプトを実行すると、一番左のシートのA1セルの値がメッセージボックスに表示されます。
先のシート名を使って取得するスクリプトで、
var sh = bk.getSheetByName("sample");
となっていた箇所が、
var arr_sh = bk.getSheets();
になっています。
SpreadsheetクラスのgetSheets()メソッドを使うと、すべてのシートを取得することができます。
Spreadsheet.getSheets()メソッドではすべてのシートが配列として返され、配列の1つ目の要素(添え字・インデックスの「0」)が、一番左のシートを表します。
配列の添え字・インデックスのはじまりが、「1」ではなく「0」だというところが、特に、Excel VBA(Visual Basic for Applications)のコレクションのインデックスが「1」始まりであることに慣れている方は要注意です。
上記のスクリプトでは、
var arr_sh = bk.getSheets();
で、arr_shにすべてのシートを格納して、arr_sh[ ]の添え字に「0」を指定して、一番左のシートを取得して、そのA1セルの値をメッセージボックスに表示しています。
Browser.msgBox(arr_sh[0].getRange("A1").getValue());
インデックスを指定してSheetを取得するサンプルスクリプト
Spreadsheet.getSheets()メソッドを使って、一番左のシートを取得するなら以下のようなコードも考えられます。
var bk = SpreadsheetApp.getActiveSpreadsheet();
var sh = bk.getSheets()[0];
Browser.msgBox(sh.getRange("A1").getValue());
}先のスクリプトでは、
var arr_sh = bk.getSheets();
Browser.msgBox(arr_sh[0].getRange("A1").getValue());
と、まず全シートを含む配列を取得してから、一番左のシートを取得していましたが、このスクリプトでは、
var sh = bk.getSheets()[0];
Browser.msgBox(sh.getRange("A1").getValue());
と、Spreadsheet.getSheetsメソッド実行時に、配列の添え字「0」も併せて指定することで、一番左のシートをはじめから取得しています。
Home » Googleスプレッドシートの使い方 » Google Apps Scriptでアクティブでないシートを取得する