【ExcelVBA】エラー処理:文法エラー
エラーについて
VBAマクロを作成している際や実行した際に、次のようなポップアップメッセージが表示されることがあります。
これを(見ての通りですが)「エラー」と言います。上のエラーは一例に過ぎず、他にも様々なエラーが発生する可能性があります。
また、VBAに限らず、エラーはあらゆるプログラムにおいて発生する可能性のある事象です。
エラーは想定した通りの動きをしていない/できない時に発生するもので、プログラマにとってはエラーのないプログラムを実装することが理想ですが、全てのエラーを発生させないようにすることは非常に難しい課題でもあります。
今回は、そんなプログラムとは切っても切れない関係である、「エラー」について見ていきます。
VBAにおけるエラーの種類
まずはVBAにおけるエラーの種類について見ていきましょう。
エラーは大きく次のように分類することができます。
それぞれ次のような意味があります。
種類 | 内容 | |
文法エラー(記述エラー) | スペルミスや記述不足などによって、VBAの構文的・文法的に誤った記述をした場合に発生するエラーを指します。記述した人のミスによって発生します。 | |
---|---|---|
論理エラー | コンパイルエラー | コンパイルする段階で発生するエラーのことをコンパイルエラーと言います。構文的には誤りが無い状態でも発生することがあります。 |
実行時エラー | 実行する際に発生するエラーを指します。コンパイルエラーはコンパイルすることで実行前に発生することを確認できますが、実行時エラーは実行したタイミングでないと発生しません。 |
※補足:コンパイルとは
VBAは実行する前に我々がVBEに記述したVBAプログラムを、Excelが実行するためにExcelが理解できる形式に変換します。この変換のことを「コンパイル」と言います。VBAに限らずプログラムというのは実行形式に変換するこのコンパイルという処理が行われて、実行されます。
今回は、このエラーの中の特に「文法エラー(記述エラー)」と呼ばれているエラーについて学習します。
(論理エラーは別記事で説明していきます。)
文法エラーとは
文法エラーとは上の表でも説明をしましたが、文法的な誤りがある記述をしたときに発生するエラーです。
VBEでプログラムを書いている際に、行末でEnterキーを押した際に、ポップアップが表示されるとともに、次の図のようにその行の文字が赤くなったことがあるでしょうか。
これが文法エラーになります。
VBEは賢いエディタで、我々が記述したプログラムが文法的に正しいかどうかをチェックし、誤っている場合は向こうから教えてくれるのです。
少しわかりにくいのは、このエラーポップアップの文言ですが「コンパイルエラー」と表示される点です。
先ほどの分類では「コンパイルエラー」は「論理エラー」に該当するので、「文法エラー」のメッセージに「コンパイルエラー」と表示されるのは違和感があるかもしれません。
しかし、「文法エラー」も文法的な誤りによって結局のところ、コンパイルができないというエラーになりますので、「コンパイルエラー」と表示されます。
文法エラーの例
では、文法エラーの具体的な記述を見ていきましょう。
文法エラーの具体例1
Sub Sample1() MsgBox(★ End Sub
※★マークの行でEnterキーを押してください。
これは、MsgBoxという関数のカッコが閉じていないという構文的な誤りが原因です。
下記のように何かカッコの中に入れてあげて、カッコを閉じれば文法エラーは解消できます。
Sub Sample1() MsgBox("test") End Sub
文法エラーの具体例2
Sub Sample2() If Range("A1").Value >= 100 ★ Debug.Print ("100以上") Else Debug.Print ("100未満") End If End Sub
※★マークの行でEnterキーを押してください。
これは、If文の「Then」が抜けている構文的な誤りが原因です。
下記のように「Then」を記述してあげれば文法エラーは解消できます。
Sub Sample2() If Range("A1").Value >= 100 Then Debug.Print ("100以上") Else Debug.Print ("100未満") End If End Sub
文法エラーの具体例3
Sub Sample3() For Each item Range("A1:A5") ★ Debug.Print (item) Next End Sub
※★マークの行でEnterキーを押してください。
これは、For Each文の「In」が抜けている構文的な誤りが原因です。
下記のように「In」を記述してあげれば文法エラーは解消できます。
Sub Sample3() For Each item In Range("A1:A5") Debug.Print (item) Next End Sub
いかがでしょうか?文法エラーが発生するのは記述の誤りによるものですが、VBEが教えてくれるのですぐに直すことができます。
VBAを記述する際に赤文字になっている箇所があったら放置せずに、原因を調べて修正できるようになりましょう。
まとめ
・エラーは「文法エラー」「論理エラー」に大別できる。
・文法エラーとは、プログラムの記述誤りが原因のエラー。記述エラーともいう。
確認問題
確認問題1
次の記述の文法エラーを見つけなさい。
Sub Test1() Debug.Print("test")) End Sub
確認問題2
次の記述の文法エラーを見つけなさい。
Sub Test2() MsgBox ("てすと ") End Sub
確認問題3
次の記述の文法エラーを見つけなさい。
Sub Test3() i = 1 To 5 Debug.Print (i) Next End Sub
次回は、「論理エラー」です。