はじめに:「エラーが出た!」そのときどうする?
VBAでマクロを実行すると、「エラーが発生しました」とメッセージが表示されて止まってしまうことがあります。
このようなエラーは、主に2つあります。
- 書き方の間違い → 「構文エラー」
- 実行中に起こる問題 → 「実行時エラー」
それぞれのエラーがどう違うのか、どうやって直せばいいのかを解説します。
エラーはすべて同じではない
まず最初に知っておいてほしいことは、エラーには種類があるということです。
VBAでエラーが起きると、よく「デバッグ」「中断」「ヘルプ」などが出てきますが、その原因によって対応方法も変わってきます。
エラーの種類 | 起きるタイミング | 主な原因 |
---|---|---|
構文エラー | 書いた瞬間 | 書き方ミス |
実行時エラー | マクロ実行時 | データの状態や存在しないものを指定 |
この違いを知っておくと、落ち着いて修正することができるようになります。
構文エラーとは?(書き方のまちがい)
「構文エラー」とは、VBAの文法に合っていない書き方をしてしまったときに出ます。このとき、マクロは一切実行されません。
よくある構文エラーの例
例1:スペルミス
MsgBoxx "こんにちは"
「MsgBoxx」という命令はVBAにはありません。正しくは「MsgBox」です。
基本的には小文字で入力して問題ないですが、正しく記載していない場合、MとBが大文字になりません。大文字になったか?を確認するのもエラーを防ぐ一つの方法です。
例2:カッコの閉じ忘れ
MsgBox ("おはよう"
「)」
が抜けています。
例3:End Sub を忘れた
Sub Test()
MsgBox "OK"
End Sub
がないと、「構文が間違っています」とエラーになります。
メッセージの見え方
- 書いた瞬間に色が変わる(基本は赤色になる)
- 実行しようとすると「構文エラー」と出て黄色くなり、止まる
- 修正しないとマクロが動かない
実行時エラーとは?(動かしたときに止まる)
「実行時エラー」とは、マクロが一度は動きますが、途中で止まってしまった状態です。
書き方自体には問題がなくても、実行中に予想外のことが起こるとエラーになります。
よくある実行時エラーの例
例1:存在しないセルを指定した
Range("Z2000000").Value = "NG"
最新のExcelでも104万行程度しかないため、エラーになります。
例2:開いていないブックを操作しようとした
Workbooks("売上.xlsx").Worksheets("1月").Range("A1").Value = 100
そのブックが開かれていないとエラーになります。
例3:0で割ってしまった
Dim x As Long
x = 10 / 0
割り算で0を使うと止まります。
実行時エラーの特徴
- マクロが一度は動く(実行はされる)
- エラーが起きた行が黄色になる
- 「エラー ‘9’: インデックスが有効範囲にありません」など、番号付きで表示される
構文エラーと実行時エラーの違いを整理しよう
ここで、両者の違いを改めてまとめます。
比較項目 | 構文エラー | 実行時エラー |
---|---|---|
発生タイミング | コードを書いた時点 | マクロを実行している途中 |
主な原因 | スペルミス・閉じ忘れなど | 存在しないシートやセルを操作した時など |
メッセージ | 「構文エラー」などの赤い枠 | 「エラー ‘xx’」という番号つきのウィンドウ |
処理の実行 | 一切動かない | 一部動いてから止まる |
どちらが厄介?
初めての方にとって厄介なのは、実行時エラーの方です。
- 書き方に問題がないから気づきにくい
- 実行環境によってはエラーにならないこともある(たとえばファイルが存在する場合)
- 人によって実行順や対象が違えば、出たり出なかったりする
エラー処理で対応するなら?
VBAには On Error
という命令で、実行時エラーを自動で処理する方法があります。
構文エラーは書き方のミスなので、自動で処理することはできません。
On Error Resume Next
' このあとエラーが出ても止まらない
On Error GoTo 0
' エラー処理を解除
回避する方法はありますが、エラーを無視することになるので、かえって正しい結果にならないことがあります。
その点も考慮した上で、エラー回避を取る必要があることは理解しておきましょう。
まとめ
構文エラーは「書いた時点」で気づける書き方の間違い、 実行時エラーは「動かしたあと」に出る実際の処理中の問題です。
- 書き方ミスは実行前に止まる → 構文エラー
- 存在しないデータなどで途中停止 → 実行時エラー
- 実行時エラーには
On Error
で対処も可能
エラーは誰にでも起きるものです。違いを知っておくだけで、 落ち着いて対処できるようになります。
「なぜ止まったか」を理解しながら、確実なマクロ作成を目指しましょう。
コメント