【Excelマクロ】VBAコンパイルエラー「配列がありません」の原因と対処法

スポンサードリンク
VBA

この記事を読んでわかること

  • VBAのコンパイルエラー「配列がありません」の原因と対処法がわかる
  • 変数が配列かどうかを知る方法を学べる

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします

スポンサードリンク

VBAコンパイルエラー「配列がありません」の原因と対処法

コンパイルエラー配列がありません
コンパイルエラー配列がありません

このエラーは、配列の要素を指定しなかった場合などに発生します。
例えば下記のVBAコードを見てください。

Sub test()
    Dim arr As String  ' 変数(配列)を作成
    Debug.Print arr(0) ' 要素を作成せずに配列の0番目を表示=エラー
End Sub
配列が無いエラーの例

2行目で配列を作ったつもりが、要素数を指定し忘れています。
正しくは下記のとおりです。

Sub 配列がありません対処法()
    Dim arr(3) As String ' 変数(配列)を作成し要素を3つ確保
    Debug.Print arr(0)   ' 配列の0番目を表示
End Sub

要素の無い配列を操作しようとすると、「配列がありません」というエラーが発生します。

これは、目的地に行こうとしたけど住所が存在しない、電話をしようとしたけど電話番号が存在しないという場合と同じです。
配列を作成する場合は、要素数を指定するようにしましょう。

要素数が一定ではない場合、要素数を変数で指定したい場合もあるかと思います。
その場合、「定数式が必要です」というエラーが発生することがあります。
もし発生した場合は、下記記事を参考に対処を行ってください。

配列かどうかがわからない時は

長いプログラムでは、変数が配列かどうかがわからなくなる場合も少なくありません。
一行一行コードをさかのぼって確認するのは大変です。

そんな時は、「IsArray」関数を使うことで配列かどうかを判定できます。
下記のVBAコードを見てください。

    If IsArray(arr) Then   ' 変数「arr」が配列なら
        Debug.Print arr(0) ' 配列の0番目を表示
    Else                   ' 配列ではないなら
        Debug.Print arr    ' 変数の中身を表示
    End If

「IsArray」関数は()内の変数が配列なら「True」を返します。
Ifによる条件分岐と組み合わせることで、配列の場合と配列以外の場合とで処理を分けることができます。

スポンサードリンク

最後に

VBA(Excelマクロ)のコンパイルエラー「配列がありません」について解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました