GASで「ReferenceError: ActiveWorkbook is not defined」エラーの原因と解決策

最終更新日: 2026-08-27

💡 このエラーを含む【Google Apps Script (GAS)エラー完全攻略ハンドブック】をnoteで公開中 →

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ではブック(ファイル全体)を操作する際に ActiveWorkbookWorkbooks といったグローバルなオブジェクトやプロパティを使用しますが、JavaScriptベースのGASにはこれらは存在しません。

GASでスプレッドシートファイルを操作する際は、SpreadsheetApp というサービスを使用するのが基本となります。

主なオブジェクトの対比表

VBAからGASへの移行時は、以下のオブジェクトの置き換えを意識してください。

概念・操作Excel VBAGoogle Apps Script (GAS)
アプリケーション全体ApplicationSpreadsheetApp
アクティブなブック/ファイルActiveWorkbookSpreadsheetApp.getActiveSpreadsheet()
アクティブなシートActiveSheetSpreadsheetApp.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') を使用してください。

💡 このエラーを含む【Google Apps Script (GAS)エラー完全攻略ハンドブック】をnoteで公開中 →