目次
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
を使う
エラーを防ぐために、適切なデータ型を意識してコードを書きましょう!
コメント