【VBA】エラー「型が一致しません」の解決方法

エラーメッセージ「実行時エラー ’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 を使う(ただし多用は非推奨)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次