Developer

【ExcelVBA】エラー処理:文法エラー
2022.08.31
Lv1

【ExcelVBA】エラー処理:文法エラー

エラーについて

VBAマクロを作成している際や実行した際に、次のようなポップアップメッセージが表示されることがあります。

VBA_エラーポップアップ_文法エラー例

これを(見ての通りですが)「エラー」と言います。上のエラーは一例に過ぎず、他にも様々なエラーが発生する可能性があります。
また、VBAに限らず、エラーはあらゆるプログラムにおいて発生する可能性のある事象です。
エラーは想定した通りの動きをしていない/できない時に発生するもので、プログラマにとってはエラーのないプログラムを実装することが理想ですが、全てのエラーを発生させないようにすることは非常に難しい課題でもあります。

今回は、そんなプログラムとは切っても切れない関係である、「エラー」について見ていきます。

VBAにおけるエラーの種類

まずはVBAにおけるエラーの種類について見ていきましょう。
エラーは大きく次のように分類することができます。

VBA_エラーの種類
エラーの種類

それぞれ次のような意味があります。

種類 内容
文法エラー(記述エラー) スペルミス記述不足などによって、VBAの構文的・文法的に誤った記述をした場合に発生するエラーを指します。記述した人のミスによって発生します。
論理エラー コンパイルエラー コンパイルする段階で発生するエラーのことをコンパイルエラーと言います。構文的には誤りが無い状態でも発生することがあります。
実行時エラー 実行する際に発生するエラーを指します。コンパイルエラーはコンパイルすることで実行前に発生することを確認できますが、実行時エラーは実行したタイミングでないと発生しません。

※補足:コンパイルとは
VBAは実行する前に我々がVBEに記述したVBAプログラムを、Excelが実行するためにExcelが理解できる形式に変換します。この変換のことを「コンパイル」と言います。VBAに限らずプログラムというのは実行形式に変換するこのコンパイルという処理が行われて、実行されます。

今回は、このエラーの中の特に「文法エラー(記述エラー)」と呼ばれているエラーについて学習します。
(論理エラーは別記事で説明していきます。)

文法エラーとは

文法エラーとは上の表でも説明をしましたが、文法的な誤りがある記述をしたときに発生するエラーです。
VBEでプログラムを書いている際に、行末でEnterキーを押した際に、ポップアップが表示されるとともに、次の図のようにその行の文字が赤くなったことがあるでしょうか。

VBA_エラー行の赤文字表示

これが文法エラーになります。
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
答え
Debug.Print関数の閉じカッコが一つ多いです。
下記のように記述すればOKです。
[vb] Sub Test1()
Debug.Print("test")
End Sub
[/vb]

確認問題2

次の記述の文法エラーを見つけなさい。

Sub Test2()
    MsgBox ("てすと
    ")
End Sub
答え
ダブルクォテーションで囲った文字列内に改行を入れているためエラーになっています。
下記のように記述する必要があります。

[vb] Sub Test2()
MsgBox ("てすと")
End Sub
[/vb]

確認問題3

次の記述の文法エラーを見つけなさい。

Sub Test3()
    i = 1 To 5
        Debug.Print (i)
    Next
End Sub
答え
「i = 1 To 5」の行がエラーになります。
記述を見ると繰り返し処理を記述しようとしていると想定できますので、
下記のように記述するとエラーが解消できます。

[vb] Sub Test3()
For i = 1 To 5
Debug.Print (i)
Next
End Sub
[/vb]

次回は、「論理エラー」です。

 

連載目次リンク

ExcelVBA 入門 連載目次