Google Apps Script入門 | 第20回.エラー処理(try・・・catch) | Google Apps Script(GAS)の入門解説です



最終更新日:2016-10-26

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

Google Apps Scriptでは、他の言語(VBA等)で、どうしても発生する事の多い、

データ型のエラーが発生しません、

従って、スプレッドシートを扱っている範囲内では、ほとんどエラーは出ないのですが、

とはいえ、全くエラーが出ないという事でもありません。

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



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

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

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


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

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

普通に書いたスクリプト

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

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





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入門」の記事

第21回.配列って何なんだ?
第22回.オブジェクト、メソッド、プロパティとは
第23回.行・列を操作する(挿入・削除・非表示・サイズ)
第24回.シートの挿入・削除・名前変更
第25回.スプレッドシート(ブック)の作成・名前変更
第26回.セルのコピー&各種ペースト
第27回.セルに数式を入れる

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

メモの挿入・削除と改行文字|Google Apps Script入門(12月6日)
リンクの挿入・編集・削除|Google Apps Script入門(12月6日)
セルに数式を入れる|Google Apps Script入門(12月1日)
セルのコピー&各種ペースト|Google Apps Script入門(11月22日)
Twitter Bot 作成|Google Apps Script応用(11月6日)
Excel流の最終行の取得|Google Apps Script応用(11月6日)
方眼紙Excelが楽に入力できるVBA|ExcelマクロVBAサンプル集(11月5日)
「ポケモンを確実に見つける方法」をExcelで数学してみた|エクセル雑感(11月4日)
スプレッドシート(ブック)の作成・名前変更|Google Apps Script入門(11月4日)
シートの挿入・削除・名前変更|Google Apps Script入門(11月3日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.CSVの読み込み方法|ExcelマクロVBAサンプル集
8.変数とデータ型(Dim)|ExcelマクロVBA入門
9.セル・行・列の削除・挿入(Delete,Insert)|ExcelマクロVBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • エラー処理(try・・・catch)

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


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



    ↑ PAGE TOP