Excel VBA入門 その77:「コンパイルエラー:型が一致しません」の対処方法

エクセルVBA VBA



VBAを作成していざ実行しようとすると、「コンパイルエラー:型が一致しません」のエラーが表示されるとへこみますよね。

何がエラーの原因なのかわからず、途方に暮れる人も少なくないはず・・・。

今回は、「コンパイルエラー:型が一致しません」のエラー対処方法について徹底的に説明していきます。



「コンパイルエラー:型が一致しません」の対処方法

引用:https://uxmilk.jp/

「コンパイルエラー:型が一致しません」のエラー原因

エラーの原因として考えられるのは、

変数を渡している際に、渡した側の型と受け取った側の型が一致していない

ということです。

例えば、以下のコードのように、変数「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

それでは、このようなエラーはどのようにすれば解決できるのか、次の項目で解説していきます。

「コンパイルエラー:型が一致しません」の解決方法

解決方法としては、以下のことが挙げられます。

  1. 変数の型をコード中で一致させる
  2. 変数の型の宣言をきちんとする

詳しく解説していきます。

変数の型をコード中で一致させる

変数の型をコード中で一致させるためにも、変数が何の型になっているのか、都度確認することが良策と言えます。

変数が何の型になっているのかを確認するコードが以下のものになります。

変数の型を確認するコード:

Sub 変数の型を確認するコード()
    Debug.Print VarType(変数)
End Sub

イミディエイトウインドウに変数の型を表す数字が表示されます。

対応表は以下の表になります。

型・内容
0Empty値
1Null値
2整数型
3長整数型
4単精度浮動小数点型
5倍制度浮動小数点型
6通貨型
7日付型
8文字列型
9オブジェクト型
10エラー値
11ブール型
12バリアント型
13非OLEオートメーションオブジェクト
1410進数型
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

のように、一行で記述した場合でも変数それぞれに型を宣言する必要があるのです。

【まとめ】「コンパイルエラー:型が一致しません」の対処方法

エラーの原因として考えられるのは、

変数を渡している際に、渡した側の型と受け取った側の型が一致していない

ということです。

解決方法としては、

  1. 変数の型をコード中で一致させる
  2. 変数の型の宣言をきちんとする

ということが挙げられます。

型が一致しないというエラーはVBAでは頻繁に起こるエラーですので、今回の記事をぜひ役立ててくださいね。

コメント

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