GASで「TypeError: Cannot read properties of undefined (reading 'getRange')」が発生する原因と解決策

最終更新日: 2026-08-27

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

30秒でわかる原因と解決策

原因: SpreadsheetApp.openById()sheet.getSheetByName() で存在しないIDやシート名を指定したため、戻り値が undefined になり、その状態で getRange() を呼び出したため。 解決策: スプレッドシートIDやシート名が正しいか確認する。または、現在アクティブなシートを操作する場合は SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() を使用する。

修正コード(Before / After)

❌ エラーが発生するコード

function myFunction() {
  // 存在しないスプレッドシートIDやシート名、あるいはタイポがあると失敗する
  var ss = SpreadsheetApp.openById("invalid_spreadsheet_id");
  var sheet = ss.getSheetByName("存在しないシート");
  
  // sheet が undefined のため、ここでエラーが発生する
  var range = sheet.getRange("A1");
  Logger.log(range.getValue());
}

⭕ 修正後の推奨コード

function myFunction() {
  // 現在開いているアクティブなスプレッドシートとシートを取得する場合
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  
  // または、IDやシート名を指定して安全に取得する場合
  // var ss = SpreadsheetApp.openById("正しいスプレッドシートID");
  // var sheet = ss.getSheetByName("正しいシート名");
  // if (!sheet) {
  //   throw new Error("指定したシートが見つかりません。");
  // }

  var range = sheet.getRange("A1");
  Logger.log(range.getValue());
}

よくある発生パターンと解説

1. getSheetByName() の引数のタイポ(誤字・脱字)

最も多い原因は、getSheetByName("シート1") のように指定した文字列が、実際のGoogleスプレッドシートのタブ名と一致していないケースです。前後に不要なスペースが含まれている場合も undefined になります。

2. openById() の対象外ファイルや権限エラー

SpreadsheetApp.openById() を使用する際、指定したIDが間違っているか、スクリプトを実行しているアカウントにそのスプレッドシートへのアクセス権限がない場合、オブジェクトが正しく取得できずにエラーとなります。

3. トリガー実行時の getActiveSpreadsheet() の罠

インストール型トリガーや時間主導型トリガーからスクリプトを実行する際、getActiveSpreadsheet() は「コンテキスト(文脈)」を持たないため nullundefined を返すことがあります。トリガーから実行する場合は、必ず openById() を使って明示的にスプレッドシートを指定してください。

よくある質問 (FAQ)

Q. シートが存在しているのにこのエラーが出るのはなぜですか? A. シート名の前後に半角・全角スペースが含まれていないか確認してください。また、コード内の文字列と実際のシート名が完全に一致している必要があります。

Q. エラーを未然に防ぐにはどうすればいいですか? A. sheet 変数を取得した直後に if (!sheet) などの条件分岐(ガード節)を挟み、undefined の場合にエラーログを出力したり処理を中断させたりすることで、予期せぬクラッシュを防ぐことができます。

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