【Excelマクロ】VBAの構文エラーと実行時エラーの違いとは?

はじめに:「エラーが出た!」そのときどうする?

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 で対処も可能

エラーは誰にでも起きるものです。違いを知っておくだけで、 落ち着いて対処できるようになります。

「なぜ止まったか」を理解しながら、確実なマクロ作成を目指しましょう。

コメント