エラーメッセージ「実行時エラー ’13’: 型が一致しません」の原因と解決方法を紹介します!

目次
✅ 実行時エラー ’13’とは?
VBAで次のようなエラーが出ることがあります:
実行時エラー ’13’: 型が一致しません
このエラーは、異なるデータ型を無理に代入・比較・計算しようとしたときに発生します。
たとえば、文字列を数値に代入したり、オブジェクト型に数値を代入したりした場合などです。
✅ よくある原因5つ(+NGコード&OKコード)
🔻 原因①:文字列を数値型の変数に代入
💥 NGコード(型不一致でエラー)
Dim num As Long num = "abc" ' 文字列を数値に代入しようとして失敗
✅ OKコード
Dim num As Long num = CLng("123") ' 数字文字列を数値に変換して代入
🔻 原因②:Variant以外の変数にEmptyやNullを代入
💥 NGコード
Dim d As Date d = Null ' Null は日付型(Date)には入らない
✅ OKコード
Dim d As Variant d = Null ' Variant型であれば Null を許容
🔻 原因③:セルの値に型変換せずに演算
💥 NGコード
Dim result As Double result = Range("A1").Value + 10 ' A1に文字列が入っているとエラー
✅ OKコード
Dim result As Double
If IsNumeric(Range("A1").Value) Then
result = CDbl(Range("A1").Value) + 10
End If
🔻 原因④:オブジェクト型の変数に数値や文字列を代入
💥 NGコード
Dim ws As Worksheet Set ws = "Sheet1" ' 文字列はオブジェクトとして扱えない
✅ OKコード
Dim ws As Worksheet
Set ws = Worksheets("Sheet1") ' 正しくオブジェクトを参照
🔻 原因⑤:配列に異なる型の値を混在させる
💥 NGコード
Dim arr(1) As Integer
arr(0) = 1
arr(1) = "A" ' 文字列を整数型配列に代入しようとして失敗
✅ OKコード
Dim arr(1) As Variant
arr(0) = 1
arr(1) = "A" ' Variant型なら異なる型でも代入可能
型不一致エラーを防ぐポイント
対策項目 | 説明 |
---|---|
Option Explicit を使う | すべての変数に型宣言を強制し、曖昧な型ミスを防ぐ |
型変換関数を使う | CLng , CStr , CDbl , CDate などで明示的に型を合わせる |
入力値を事前にチェック | IsNumeric , IsDate , IsEmpty などの関数で安全性確認後に代入する |
Variant型の活用 | 型が混ざる可能性がある場合は Variant を使う(ただし多用は非推奨) |