Google Apps Script入門
エラー処理(try・・・catch)

Google Apps Script(GAS)の入門解説です
公開日:2016-10-22 最終更新日:2022-11-04

第20回.エラー処理(try・・・catch)


Google Apps Scriptでは、他の言語(VBA等)で、どうしても発生する事の多い、データ型のエラーが発生しません。


従って、スプレッドシートを扱っている範囲内では、ほとんどエラーは出ないのですが・・・
とはいえ、全くエラーが出ないという事でもありません。

Google Apps Scriptでは、
文字列に四則演算をしても、0で割り算しても、エラーでは止まりまませんので、
表計算では、まずエラーでは止まりません。
その仕様が良いかどうかは別問題ですけど。

ここで言っているエラーは、記述間違いによるエラーの事ではなく、
通常は正しく動いているが、何らかの条件下で、エラーストップしてしまうような場合の事です。

以下で説明するエラー処理は、最初から入れない事をお勧めします。
書き間違いによるエラーが正しく診断できなくなってしまうからです。

エラー処理を入れずに、一旦は完成させた上で、
入力値や、操作手順により、エラーが出てしまう時に、エラーによるストップを避けるようにして下さい。


エラー処理(try・・・catch)の例題

以下の処理を例に考えてみます。

ブラウザーでシート名を入力し、そのシートに対して何らかの処理を行う場合

普通に書いたスクリプト
function sample20_1() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var sname = Browser.inputBox("シート名を入力");
  var sheet = sh.getSheetByName(sname)
  sheet.getRange(1, 1).setValue("ここでエラーが出る可能性がある");
}

単純に書くと、こんな感じになります。
しかし、入力したシート名が存在しない時、

google apps script 参考画像

google apps script 参考画像

getRangeでエラーが発生して、スクリプトが停止してしまいます。

もちろん、このような処理の場合は、シート名が存在するかの判定をする処理を入れるべきです。
ここでは、エラーのサンプルとして、あえてそのような処理を記述していません。


try・・・catch

try {
 try_statements
}
[catch (exception_var) {
 catch_statements
}]
[finally {
 finally_statements
}]


try_statements
実行される文。

exception_var
関連する catch 節に対して例外オブジェクトを保持する識別子。

catch_statements
try ブロックの中で例外が投げられた場合に実行される文です。

finally_statements
try 文が完了した後に実行される文。
これらの文は、例外が投げられたり捕捉されたかどうかに関係なく実行されます。

少なくとも 1 つのcatch、またはfinally、もしくはその両方が必要です。
すなわち、try 文には 3 つの形式があります:

try...catch
try...finally
try...catch...finally

例外が tryブロックの中で発生しなかった場合は、catch節は飛ばされます。
finally節は、tryブロックおよびcatch節が実行された後、try文の次の文の前に実行されます。
これは、例外が発生したかどうかに関係なく、常に実行されます。

なにやら難しい書き方になっていますが、
使い方自体は、そんなに難しくはなくて、
try...catch
とりあえずは、これだけ使えれば問題ないでしょう。


try・・・catchでエラー処理を入れたスクリプト

function sample20_2() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var sname = Browser.inputBox("シート名を入力");
  try {
    var sheet = sh.getSheetByName(sname);
    sheet.getRange(1, 1).setValue("ここでエラーが出る可能性がある");
  }
  catch (e) {
    Browser.msgBox("多分シートが無い");
  }
}

エラーが発生しそうな文を、tryのブロック内に入れます。
そして、catchで、エラー発生時の処理を書きます。

入力したシートがあれば、シート2のA1に、"ここでエラーが出る可能性がある"
入力したシートがなければ、メッセージボックスに、"多分シートが無い"
と表示されます。


tryブロックに含めるステートメントの範囲

エラー発生する可能性のあるステートメントがはっきりしていれば、そのステートメントに限定出来ますが、
多くの場合、
あちこちに可能性があって、どことは限定できない・・・

このような場合は、広い範囲をtryブロックに入れてしまって構いません。
ただし、そのような場合は、エラー発生時にエラー原因を特定できなくなりますので、
その対策は、別途考えておく必要があります。


エラー処理の最後に

最初にかきましたが、
Google Apps Scriptでは、データ型のエラーが発生しませんので、
このような、エラー処理を入れる必要はあまりありません。

必要が無いというより、エラーが出ないようにスクリプトを書くべきだという事です。
今回の例なら、入力されたシート名の存在を確認するコードを入れるという事です。

ただし、
本来あるはずのシートが消えてしまった等の人為ミスまで含めれば、必ずエラーは出ます。

そして、
そのような、人為ミスのエラーを考慮してまで、スクリプトを書く必要があるかと言うと・・・

それは何とも言えませんが、完全にはエラーが出ないスクリプトは書けません。
ただし、エラー処理を入れたところで、全ての問題が解決するわけでもありません。
エラーが出たときに、その後の対処をどうするかを決めておかなければ、何も問題が解決しません。
前述の例なら、シートを復活させるしかないことは、説明の必要が無いでしょう。




同じテーマ「Google Apps Script入門」の記事

第17回.JavaScript リファレンス
第18回.組み込み関数を使う
第19回.いろいろな繰り返し処理
第20回.エラー処理(try・・・catch)
第21回.配列って何なんだ?
第22回.オブジェクト、メソッド、プロパティとは
第23回.行・列を操作する(挿入・削除・非表示・サイズ)
第24回.シートの挿入・削除・名前変更
第25回.スプレッドシート(ブック)の作成・名前変更
第26回.セルのコピー&各種ペースト
第27回.セルに数式を入れる


新着記事NEW ・・・新着記事一覧を見る

シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ