【ExcelVBA入門】「型が一致しません」のエラー原因・対処方法とは

皆さんは、VBAで「型が一致しません」のエラーを見たことがありますか?VBA以外でもプログラミング言語を使う場合、変数を使うのは必須です。そのため、変数に間違った型の値を入れてエラーが出てしまうケースはよくあります。

そこで今回は、

  • 「型が一致しません」のエラー原因
  • エラーが起きたときの対処方法
  • 変数を使う場合によく起こるエラー


について、徹底的に解説します!

目次

エラー「型が一致しません」とは

「実行時エラー ‘13’: 型が一致しません。」のエラーは、変数の型と異なる型の値を代入してしまったときにおこるエラーです。(※使用する環境によっては「実行時エラー ‘13’」部分は表示されないケースもあります。)

よくあるケースだと、Integer型に誤ってString型の文字列を入れてしまうケースですね。

Dim i as Interger
i = "侍エンジニア"

「こんな入れ方誰も間違えないんじゃ・・・」と思うかもしれませんが、次のような場合はどうでしょうか。

セルのデータ:

サンプルコード:

Sub Test2()
  Dim intNo As Integer
  intNo = ActiveSheet.Cells(2, 2).Value

  MsgBox "1行目のデータのNo:" & intNo

End Sub

エラーメッセージ:

Noの1行目はCells(2,1)が正しい書き方ですが、誤ってCells(2,2)にしてしまっていますよね。

Range(“A2”)であれば直感的にセル名がわかるので間違えにくいですが、Cellsは数字で行列を指定するため、間違てしまうケースがよくあります。このように、ぱっとコードをみても間違っていないケースもあるので、注意が必要です。

今回サンプルに使ったセルのCells・Rangeについては以下で解説しているので、気になる方は見てみてくださいね!

エラーの対処方法

エラーを対処する方法は、大きく分けて3つあります。

エラー番号で検索して調べる

表示されたメッセージにはエラー番号が載っています。メッセージ文で検索しても見つかるときは見つかりますが、稀に起こるエラーだとメッセージ文だけでは対処方法が見つからないことがあります。

そのため、エラー番号を使って調べる癖をつけるのがおすすめです!VBA エラー 13 対応方法など番号を入れてGoogle検索すると、対応方法を見つけやすいのでぜひ調べてみてくださいね!

エラー番号の場所:

変数名だけで型名がわかるようにする

変数名を見るだけで型名がわかるようにしておくと、ミスが減るのでおすすめです!よくある方法としては、先頭3文字だけで型名がわかるような変数名にする方法です。

例:

Dim intNo as Integer
Dim lngNum as Long
Dim dblTaxCost as Double
Dim strMessage as String

このように書いておくことで、型を意識して値を代入する癖がつくのでおすすめです!

変数の確認方法を覚えておく

ただ、さきほどのCells(2,2)のようにセルの値を取得する場合、セルの値を見ないと何のデータが取得できるかわからないですよね。

そんな時は、イミディエイトウィンドウを使った変数確認方法を覚えておくのがおすすめです!1行ずつ変数の値を確認することができるので、ミスにも気づきやすいですし、実際に取得するデータも確認することができます。

今回の場合だと、以下のようにイミディエイトウィンドウに書くだけで、値を確認することができます。
イミディエイトウィンドウに書くコード:

?Cells(2,2).Value

実行結果:

侍エンジニア1

イミディエイトウィンドウを使った変数確認方法は以下で詳しく解説しているので、気になる方は見てみてくださいね!

補足:エラー「オブジェクトが必要です」の対処方法

変数のエラーでは、他にも「オブジェクトが必要です」というエラーが出ることがあります。

オブジェクト変数にSetを付け忘れた場合などによく起こるエラーなのですが、初めて見るとメッセージだけでは原因がわかりづらいですよね。

以下で原因と対処方法について詳しくまとめているので、気になる方は見てみてくださいね!

まとめ

今回は、VBAで「型が一致しません」のエラーが出たときの対処方法について解説しました。変数を使ってコードを書けるようになった方が最初にぶつかるエラーなので、対処方法を覚えておくのがおすすめです。

エラーが起こった時は、ぜひ試してみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次