GAS(Google Apps Script)スクリプトを作成しているときに、Googleスプレッドシートに含まれるシートの枚数を取得する必要が出てきました。
その際、Excel VBA(Visual Basic for Applications)とは、考え方が随分違うなと感じましたので、記事にしておきます。
VBAではコレクションオブジェクトに必ずCountプロパティがある
Excel VBAの場合、ワークシートもグラフシートも含むすべてのシートの枚数を取得するには、SheetsコレクションオブジェクトのCountプロパティを利用します。
ワークシートだけの枚数ならば、WorksheetsコレクションオブジェクトのCountプロパティで取得できます。
Sheetsコレクション・Worksheetsコレクションに限らず、VBAでは、そのコレクションに含まれる単一オブジェクトの数を返すCountプロパティが、コレクションオブジェクトには必ず用意されています。
Spreadsheet.getNumSheets()メソッドでシートの枚数を取得するサンプルスクリプト
VBAのオブジェクトモデルの考え方に慣れている私は、GASでもついつい同じように考えてしまいましたが、GASの場合はまったく違う考え方をする必要があり、以下のようなスクリプトでシートの枚数を取得できます。
var bk = SpreadsheetApp.getActiveSpreadsheet();
var sh_cnt = bk.getNumSheets();
Browser.msgBox(sh_cnt);
}Excel VBAのWorkbookオブジェクト的な立場にあるSpreadsheetクラスに、シートの枚数を取得するgetNumSheet()メソッドが存在しています。
Spreadsheet.getSheets()メソッドとJavaScriptのArray.lengthプロパティでシートの枚数を取得するサンプルスクリプト
Excel VBA的な考え方をするなら、以下のようなコードでしょうか。
var bk = SpreadsheetApp.getActiveSpreadsheet();
var sh_cnt = bk.getSheets().length;
Browser.msgBox(sh_cnt);
}SpreadsheetクラスのgetSheets()メソッドを使ってSheetオブジェクトを配列の形で取得して、配列の要素数を取得するJavaScriptのArray.lengthプロパティを使って、Sheetの数を取得しています。
Home » Googleスプレッドシートの使い方 » Google Apps Scriptでシートの枚数を取得する