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回.いろいろな繰り返し処理
・にある反復処理 ・繰り返し処理の例題 ・for ・do...while ・while ・break ・continue ・繰り返し処理の最後に
第20回.エラー処理(try・・・catch)
第21回.配列って何なんだ?
・配列を作成する ・インデックスを指定して操作する ・配列に追加する ・配列から削除する ・PPAP ・配列の繰り返し処理 ・多次元配列について ・配列の最後に
第22回.オブジェクト、メソッド、プロパティとは
・オブジェクト ・メソッド ・プロパティ ・具体例 ・オブジエクトの階層構造とメソッドの戻り値
第23回.行・列を操作する(挿入・削除・非表示・サイズ)
シートの行や列全体に対する操作になります、挿入、削除、表示非表示、行高、列幅、これらは、sheetオブジェクトのメソッドを使います。以下では、sheetオブジェクトのメソッドのうち、行・列に関するメソッドを抜粋しています。基本として見方、使い方ですが、1行や1列のみ対象の場合は単数形(Row,Column) 複数行…
第24回.シートの挿入・削除・名前変更
シートの挿入、シートの削除、シートの名前変更です、シートの挿入・削除は、Spreadsheetオブジェクトのメソッド、名前の変更は、Sheetオブジェクトのメソッドになります。以下では、これだけ覚えておけば良いというメソッドに限定して抜粋しています。
第25回.スプレッドシート(ブック)の作成・名前変更
スプレッドシートの作成と名前変更です、スプレッドシートの作成は、SpreadsheetAppのcreateメソッド、名前の変更は、Spreadsheetオブジェクトのrenameメソッドになります。削除は、と思ってメソッドを探しましたが、見当たりませんでした。
第26回.セルのコピー&各種ペースト
GoogleAppsScriptで、スプレッドシートのセルをコピペする時の書き方になります、セルのコピペといっても、セル全体、値のみ、書式のみと、いろいろな貼り付け方法があります。記述方法は複数ありますが、基本の使い方だけ覚えれば十分です。
第27回.セルに数式を入れる
GoogleAppsScriptで、スプレッドシートのセルに、計算結果ではなく、計算式そのものを入れる場合のほうほうについての解説です。スクリプトで処理する場合は計算結果を入れる事が多いのですが、時に計算式を入れた方が後の使い勝手が良い場合もあります。


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

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


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