VBAを作成していざ実行しようとすると、「コンパイルエラー:型が一致しません」のエラーが表示されるとへこみますよね。
何がエラーの原因なのかわからず、途方に暮れる人も少なくないはず・・・。
今回は、「コンパイルエラー:型が一致しません」のエラー対処方法について徹底的に説明していきます。
「コンパイルエラー:型が一致しません」の対処方法
「コンパイルエラー:型が一致しません」のエラー原因
エラーの原因として考えられるのは、
変数を渡している際に、渡した側の型と受け取った側の型が一致していない
ということです。
例えば、以下のコードのように、変数「days」を2行目ではString型で指定しているのに対し、7行目で変数「days」をDate型で参照渡ししていることで、「型が一致しない」というエラーが発生します。
Sub 型が一致しない例()
Dim days As String
days = 20190101
Call pasteInfo(days)
End Sub
Sub pasteInfo(ByRef days As Date)
'処理 (省略)
End Sub
それでは、このようなエラーはどのようにすれば解決できるのか、次の項目で解説していきます。
「コンパイルエラー:型が一致しません」の解決方法
解決方法としては、以下のことが挙げられます。
- 変数の型をコード中で一致させる
- 変数の型の宣言をきちんとする
詳しく解説していきます。
変数の型をコード中で一致させる
変数の型をコード中で一致させるためにも、変数が何の型になっているのか、都度確認することが良策と言えます。
変数が何の型になっているのかを確認するコードが以下のものになります。
変数の型を確認するコード:
Sub 変数の型を確認するコード()
Debug.Print VarType(変数)
End Sub
イミディエイトウインドウに変数の型を表す数字が表示されます。
対応表は以下の表になります。
値 | 型・内容 |
0 | Empty値 |
1 | Null値 |
2 | 整数型 |
3 | 長整数型 |
4 | 単精度浮動小数点型 |
5 | 倍制度浮動小数点型 |
6 | 通貨型 |
7 | 日付型 |
8 | 文字列型 |
9 | オブジェクト型 |
10 | エラー値 |
11 | ブール型 |
12 | バリアント型 |
13 | 非OLEオートメーションオブジェクト |
14 | 10進数型 |
17 | バイト型 |
8192 | 配列 |
例えば、イミディエイトウインドウに返ってきた値が「7」ならば、その変数は日付型(Date型)ということがわかりますので、型が不一致になることを防ぐことができるのです。
変数の型の宣言をきちんとする
変数の型の宣言方法が間違っている場合があります。
以下のコードは、よくある間違いです。
sub 宣言方法の間違い()
Dim days, u_name, i_name As String
'以下省略
変数それぞれに対して型を宣言していません。
したがって、変数「days」及び「u_name」は、Variant型ということになってしまい、その結果、変数を渡したりする場合などで型が一致しなくなってしまうのです。
正しくは、
Dim days As String, u_name As String, i_name As String
のように、一行で記述した場合でも変数それぞれに型を宣言する必要があるのです。
【まとめ】「コンパイルエラー:型が一致しません」の対処方法
エラーの原因として考えられるのは、
変数を渡している際に、渡した側の型と受け取った側の型が一致していない
ということです。
解決方法としては、
- 変数の型をコード中で一致させる
- 変数の型の宣言をきちんとする
ということが挙げられます。
型が一致しないというエラーはVBAでは頻繁に起こるエラーですので、今回の記事をぜひ役立ててくださいね。
コメント