GASで「ReferenceError: ActiveWorkbook is not defined」エラーの原因と解決策
最終更新日: 2026-08-27
30秒でわかる原因と解決策
原因: Excel VBAでよく使われる
ActiveWorkbookというオブジェクトはGoogle Apps Script(GAS)には存在しないため、未定義(ReferenceError)エラーになります。 解決策: VBAのActiveWorkbookの代わりに、GASでアクティブなスプレッドシートを取得するSpreadsheetApp.getActiveSpreadsheet()を使用します。
修正コード(Before / After)
❌ エラーが発生するコード
function myFunction() {
// VBAの記述をそのまま持ち込んでいるためエラーになる
var wb = ActiveWorkbook;
var sheet = wb.getActiveSheet();
Logger.log(sheet.getName());
}
⭕ 修正後の推奨コード
function myFunction() {
// Google Apps Scriptの正しいメソッドを使用する
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
Logger.log(sheet.getName());
}
よくある発生パターンと解説
Excel VBAからGASへの移行時に最も多いミス
このエラーは、Excel VBA(Visual Basic for Applications)の経験がある開発者が、Google Apps Script(GAS)のコードを書く際に最も頻繁に遭遇するエラーの一つです。
Excel VBAではブック(ファイル全体)を操作する際に ActiveWorkbook や Workbooks といったグローバルなオブジェクトやプロパティを使用しますが、JavaScriptベースのGASにはこれらは存在しません。
GASでスプレッドシートファイルを操作する際は、SpreadsheetApp というサービスを使用するのが基本となります。
主なオブジェクトの対比表
VBAからGASへの移行時は、以下のオブジェクトの置き換えを意識してください。
| 概念・操作 | Excel VBA | Google Apps Script (GAS) |
|---|---|---|
| アプリケーション全体 | Application | SpreadsheetApp |
| アクティブなブック/ファイル | ActiveWorkbook | SpreadsheetApp.getActiveSpreadsheet() |
| アクティブなシート | ActiveSheet | SpreadsheetApp.getActiveSheet() (またはスプレッドシートインスタンスから .getActiveSheet()) |
よくある質問 (FAQ)
Q1: ActiveSheet もエラーになりますか?
A: はい、単体で ActiveSheet と書くと ReferenceError: ActiveSheet is not defined というエラーになります。GASでは SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() のように、スプレッドシートのインスタンスを経由して取得する必要があります。
Q2: 閉じている別のスプレッドシートを操作したい場合はどうすればいいですか?
A: アクティブなスプレッドシートではなく、特定のファイルを操作したい場合は、ActiveWorkbook の代わりに SpreadsheetApp.openById('スプレッドシートID') または SpreadsheetApp.openByUrl('URL') を使用してください。