配列(一次元/二次元)

動的配列で「コンパイルエラー:型が一致しません」が出た場合【ExcelVBA】

「型が一致しません:配列またはユーザー定義型を指定してください」

動的配列を引数として渡す際、コンパイルエラー「型が一致しません:配列またはユーザー定義型を指定してください」が発生する場合があります。
その場合はVariant型で定義している部分を配列として明示することで回避可能です。

「型が一致しません」が発生するコードと対処方法

'■コンパイルエラーが発生する(型が一致しません:配列またはユーザー定義型を指定してください)
Public Sub sample()
    Dim arr As Variant
    
    ReDim arr(2)
    Call functionSample(arr)    
End Sub
Public Function functionSample(tmp() As Variant)    
    tmp(0) = 0
    tmp(1) = 1
    tmp(2) = 2
End Function

 

'■コンパイルエラーが発生しないケース
Public Sub sample()
    '■事前に配列として明示してあげる
    Dim arr() As Variant
    ReDim arr(2)
    Call functionSample1(arr)
    
    '■引数側を配列ではなくVariantにしてあげる
'    Dim arr As Variant
    ReDim arr(2)
    Call functionSample2(arr)
    
End Sub
Public Function functionSample1(tmp() As Variant) 'Variant型の配列を引数としている
    tmp(0) = 0
    tmp(1) = 1
    tmp(2) = 2
End Function
Public Function functionSample2(tmp As Variant)     'Variant型を引数としている
    tmp(0) = 0
    tmp(1) = 1
    tmp(2) = 2
End Function

その他

  • 本エラーは単純に呼び出し元と呼び出し先のデータ型を合わせるだけの話です。

関連記事

コメント

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