エラー内容
エラー13の「型が一致しません」は、変数へ値を代入する際に発生するエラーで、数値型の変数に対して文字列を代入しようとするなど、変数の型とは違う値を代入しようとすると発生します。
VBAでは変数定義時に型を指定する場合としない場合の両方が可能ですが、エラー13は型を指定している場合に発生します。型が未設定もしくはVariantの場合は発生しません。
エラーの原因
エラーの原因は、変数の型に対して代入する値の型が間違っているため発生します。
以下は2行目で数値型であるInteger型の変数を定義していますが、4行目の代入では文字列を指定しているためエラー13になります。
1 2 3 4 5 |
Sub Err13Test() Dim i As Integer i = "test" End Sub |
数値型は互いに代入可能
整数を扱う型には、Byte、Boolean、Integer、Long、LongLong(64ビット環境)、LongPtrがあります。
また、小数点を扱う型(浮動小数点数型)には、Single、Double、Currencyがあります。
整数型同士や浮動小数点数型同士は、値が型の範囲内であれば相互に代入することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Err13IntegerTest() Dim byteValue As Byte Dim booleanValue As Boolean Dim integerValue As Integer Dim longValue As Long Dim longptrValue As LongPtr byteValue = 255 booleanValue = True integerValue = 32767 longValue = 2147483647 longptrValue = byteValue longptrValue = booleanValue longptrValue = integerValue longptrValue = longValue End Sub |
ここではバイト数が小さい型から大きい型にコピーしていますが、代入元から代入先のそれぞれの型が許容範囲内の値であれば大きい型から小さい型へ、例えばLongPtr型の変数に3を入れて、Byte型の変数に代入するようなことも可能です。
このような場合はエラー13は発生しません。浮動小数点数型も同様です。
エラーの対応方法
先ほどのエラーが発生するコードを修正する方法は以下になります。
変数定義の型が誤っているのか、それとも代入する値が誤っているのかは状況によって異なりますので、そこは適宜確認してください。
修正前
1 2 3 4 5 |
Sub Err13Test() Dim i As Integer i = "test" End Sub |
修正後
2行目の変数の型をIntegerからStringに修正しています。
1 2 3 4 5 |
Sub Err13Test() Dim i As String i = "test" End Sub |
もしくは、4行目の代入する値を数値に修正することでもエラー回避になります。
1 2 3 4 5 |
Sub Err13Test() Dim i As Integer i = 123 End Sub |