第20回.エラー処理(try・・・catch)
Google Apps Scriptでは、他の言語(VBA等)で、どうしても発生する事の多い、データ型のエラーが発生しません。
とはいえ、全くエラーが出ないという事でもありません。
文字列に四則演算をしても、0で割り算しても、エラーでは止まりまませんので、
表計算では、まずエラーでは止まりません。
その仕様が良いかどうかは別問題ですけど。
通常は正しく動いているが、何らかの条件下で、エラーストップしてしまうような場合の事です。
書き間違いによるエラーが正しく診断できなくなってしまうからです。
入力値や、操作手順により、エラーが出てしまう時に、エラーによるストップを避けるようにして下さい。
エラー処理(try・・・catch)の例題
function sample20_1() {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var sname = Browser.inputBox("シート名を入力");
var sheet = sh.getSheetByName(sname)
sheet.getRange(1, 1).setValue("ここでエラーが出る可能性がある");
}
単純に書くと、こんな感じになります。
しかし、入力したシート名が存在しない時、


ここでは、エラーのサンプルとして、あえてそのような処理を記述していません。
try・・・catch
try_statements
}
[catch (exception_var) {
catch_statements
}]
[finally {
finally_statements
}]
これらの文は、例外が投げられたり捕捉されたかどうかに関係なく実行されます。
すなわち、try 文には 3 つの形式があります:
try...finally
try...catch...finally
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で、エラー発生時の処理を書きます。
入力したシートがなければ、メッセージボックスに、"多分シートが無い"
と表示されます。
tryブロックに含めるステートメントの範囲
多くの場合、
あちこちに可能性があって、どことは限定できない・・・
ただし、そのような場合は、エラー発生時にエラー原因を特定できなくなりますので、
その対策は、別途考えておく必要があります。
エラー処理の最後に
Google Apps Scriptでは、データ型のエラーが発生しませんので、
このような、エラー処理を入れる必要はあまりありません。
今回の例なら、入力されたシート名の存在を確認するコードを入れるという事です。
本来あるはずのシートが消えてしまった等の人為ミスまで含めれば、必ずエラーは出ます。
そのような、人為ミスのエラーを考慮してまで、スクリプトを書く必要があるかと言うと・・・
ただし、エラー処理を入れたところで、全ての問題が解決するわけでもありません。
エラーが出たときに、その後の対処をどうするかを決めておかなければ、何も問題が解決しません。
前述の例なら、シートを復活させるしかないことは、説明の必要が無いでしょう。
同じテーマ「Google Apps Script入門」の記事
第17回.JavaScript リファレンス
第18回.組み込み関数を使う
第19回.いろいろな繰り返し処理
第20回.エラー処理(try・・・catch)
第21回.配列って何なんだ?
第22回.オブジェクト、メソッド、プロパティとは
第23回.行・列を操作する(挿入・削除・非表示・サイズ)
第24回.シートの挿入・削除・名前変更
第25回.スプレッドシート(ブック)の作成・名前変更
第26回.セルのコピー&各種ペースト
第27回.セルに数式を入れる
新着記事NEW ・・・新着記事一覧を見る
シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)
列幅不足による###表示や指数表示を判定する|VBA技術解説(2023-07-12)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-07-04)
シート関数のCOUNTIFS,SUMIFS,MAXIFSと同じ処理|Power Query(M言語)入門(2023-02-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門
- ホーム
- その他
- Google Apps Script入門
- エラー処理(try・・・catch)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。