VBAにおける「型の不一致エラー(Type Mismatch)」とその対処法

1. 型の不一致エラーとは?

VBAの「型の不一致エラー(Type Mismatch)」は、あるデータ型の変数に対して、適切でないデータ型の値を代入しようとした場合に発生するエラー(エラーコード 13) です。


2. 型の不一致エラーが発生する具体例と解決策

(1) 数値型の変数に文字列を代入した場合

Sub TypeMismatchExample1()
Dim num As Integer
num = "ABC" 'エラー発生(数値型に文字列を代入)
End Sub

解決策:適切なデータ型に変換する(Val や CInt を使用)>

Sub FixedExample1()
Dim num As Integer
num = CInt("123") '文字列 "123" を数値に変換
Debug.Print num  '出力: 123
End Sub

(2) 日付型の変数に無効な日付を代入した場合

Sub TypeMismatchExample2()
Dim dt As Date
dt = "Hello" 'エラー発生(無効な日付を代入)
End Sub

解決策:適切な日付の形式で変換する(CDate を使用)>

Sub FixedExample2()
Dim dt As Date
dt = CDate("2024/03/16") '文字列を日付に変換
Debug.Print dt       '出力: 2024/03/16
End Sub

(3) 配列変数に単一の値を代入した場合

Sub TypeMismatchExample3()
Dim arr() As Integer
arr = 10 'エラー発生(配列に単一の値を代入)
End Sub

解決策:配列には ReDim を使って要素を確保してから代入>

Sub FixedExample3()
Dim arr() As Integer
ReDim arr(0) '配列を初期化
arr(0) = 10 'これならOK
Debug.Print arr(0) '出力: 10
End Sub

(4) オブジェクト型の変数に適切でない型の値を代入した場合

Sub TypeMismatchExample4()
Dim ws As Worksheet
ws = "Sheet1" 'エラー発生(文字列をオブジェクト型に代入)
End Sub

解決策Set を使って適切にオブジェクトを代入する>

Sub FixedExample4()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") '正しい代入方法
Debug.Print ws.Name '出力: Sheet1
End Sub

(5) Variant 型の変数を特定の型に変換しようとして失敗した場合

Sub TypeMismatchExample5()
Dim v As Variant
v = "abc"
Debug.Print CInt(v) 'エラー発生(文字列 "abc" を数値に変換できない)
End Sub

解決策:数値に変換できるか事前にチェックする>

Sub FixedExample5()
Dim v As Variant
v = "123"

If IsNumeric(v) Then '数値に変換可能かチェック
Debug.Print CInt(v) '出力: 123
Else
Debug.Print "変換できません"
End If
End Sub

3. 型の不一致エラーの一般的な回避方法

方法説明
CInt() CLng() CDbl() など数値型に適切に変換する
CDate()文字列を日付に変換する
CStr()数値やオブジェクトを文字列に変換する
IsNumeric()変換前に値が数値かどうか確認する
Set を使用オブジェクト型の変数には Set を使って代入
ReDim を使う配列には事前に領域を確保する

4. まとめ

  • 型の不一致エラーは 異なるデータ型を無理に代入しようとすると発生 する
  • CInt() や CDate() などの 型変換関数を活用 することで回避できる
  • 事前に IsNumeric() などで 値の型をチェック するのも有効
  • オブジェクト型には Set を使う、配列には ReDim を使う

エラーを防ぐために、適切なデータ型を意識してコードを書きましょう!

コメント

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