VBAにおける型の不一致エラー(Type Mismatch)

VBAを使っていると、「型が一致しません。(Type Mismatch)」というエラーが発生することがあります。
このエラーは、変数のデータ型と代入する値の型が一致しないときに発生します。
本記事では、このエラーが発生する原因と、その対策について解説します。


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

型の不一致エラー(Type Mismatch)は、宣言したデータ型と異なる型の値を代入しようとしたときに発生するエラーです。

例えば、Integer型の変数に文字列を代入しようとすると、VBAは整数として扱えないため、型の不一致エラーが発生します。

Sub SampleTypeMismatch()
Dim num As Integer
num = "ABC" '文字列をInteger型に代入しようとするとエラー
End Sub

このコードを実行すると、「型が一致しません。」(エラー 13) が発生します。


2. 型の不一致エラーが発生する主な原因と対策

(1) データ型の違いによるエラー

異なる型のデータを代入すると、エラーが発生します。

例: Integer型に文字列を代入

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

対策:
明示的に型変換を行い、適切な型で処理します。

Sub FixedExample1()
Dim num As Integer
num = CInt("100") 'CIntで明示的に変換
End Sub

(2) オブジェクト型と値型の違いによるエラー

オブジェクト型の変数に値型のデータを代入しようとすると、型の不一致が発生します。

例: Rangeオブジェクトに数値を代入

Sub Example2()
Dim rng As Range
rng = 10 'エラー発生(オブジェクト型に数値を代入)
End Sub

対策:
オブジェクト型には、Set を使用して適切なオブジェクトを代入します。

Sub FixedExample2()
Dim rng As Range
Set rng = ActiveSheet.Range("A1") '正しい代入方法
End Sub

(3) 配列とスカラー値の違いによるエラー

配列と単一の変数(スカラー値)は異なる型のため、直接代入するとエラーになります。

例: 配列を単一の変数に代入

Sub Example3()
Dim arr() As Integer
Dim num As Integer
arr = Array(1, 2, 3) 'エラー発生(配列をスカラー変数に代入)
End Sub

対策:
配列の要素を個別に代入するか、適切な配列変数を使用します。

vbコピーする編集するSub FixedExample3()
Dim arr() As Integer
Dim num As Integer
arr = Array(1, 2, 3) 'Variant型の配列になるためエラー
num = arr(0) '配列の要素を個別に代入
End Sub

(4) Variant型の誤用によるエラー

Variant型は型を自動的に判別してくれますが、意図しない型変換が起こることがあります。

例: Variant型にオブジェクトを代入

Sub Example4()
Dim v As Variant
v = ActiveSheet.Range("A1") 'Rangeオブジェクトを直接代入(エラー発生)
End Sub

対策:
Variant型を使う場合でも、適切に型変換を行うか、Set を使用します。

Sub FixedExample4()
Dim v As Variant
Set v = ActiveSheet.Range("A1") 'Set を使用
End Sub

3. 型の不一致エラーを防ぐ方法

(1) Option Explicit を使用する

Option Explicit を記述すると、変数の型を明示的に宣言しなければならなくなるため、型の誤りを事前に防ぐことができます。

Option Explicit

Sub Example5()
Dim num As Integer
num = "100" '事前に型のミスに気付ける
End Sub

(2) 明示的な型変換を行う

適切な型変換関数を使用して、データ型の不一致を防ぎます。

型変換関数変換先の型
CIntInteger型
CLngLong型
CDblDouble型
CStrString型
CBoolBoolean型
CDateDate型
CVarVariant型

例:

Dim num As Integer
num = CInt("100") '明示的な型変換

(3) TypeName や VarType を活用する

変数の型を確認して、適切な処理を行うことができます。

Sub CheckType()
Dim v As Variant
v = "Hello"
MsgBox TypeName(v) '"String" と表示される
End Sub

4. まとめ

  • 型の不一致エラー(Type Mismatch)は、変数の型と代入する値の型が一致しないときに発生する
  • 主な原因は、数値と文字列の違い、オブジェクトと値型の混同、配列とスカラー値の違い、Variant型の誤用など
  • Option Explicit を使用すると、型の誤りを事前に防げる
  • 明示的な型変換関数を使うことで、エラーを回避できる
  • TypeName や VarType を活用すると、デバッグがしやすくなる

型の不一致エラーは初心者がつまずきやすいポイントですが、データ型を意識してコードを書くことで回避できるため、適切な変数の使い方を心がけましょう。

コメント

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