Excel/VBA

TOP

『型が一致しません』と突然エラーが発生してしまった場合の対処法

『型が一致しません』と突然エラーが発生してしまったときの画像です

『型が一致しません』とエラーが出る理由

『型が一致しません』とエラーがでるパターンは、変数の型に対して、型と不一致の値が代入されようとした際に発生することが多いです。
例えば、下記のように変数の型は「Long(整数型)」としていますが、代入しようとしている値は「"文字"」となっていて、文字列を代入しようとしています。
このような場合に、代入しようとしている型が一致していませんという意味でエラーが出ています。

『型が一致しません』とエラーが発生する原因の例の画像です。

突然『型が一致しません』とエラーが出る原因

例えば、下記のような表があったとし、値の列(F列)が300未満の時、黄色で塗りつぶすという処理を記述するとします。

『型が一致しません』とエラーが発生する原因の例の画像です。

上記の画像のように値の箇所が全て数値が入力されていますが、下記のように値のセルに空白が混ざっている場合などは要注意です。
空白をそのままLong型(整数型)に代入すると、0として処理されるため、予期しないバグが発生する可能性があります。また、セルに何も入っていないように見えても、実際にはスペースなどが含まれていることがあり、その場合もエラーが発生することがあります。

『型が一致しません』とエラーが発生する原因の例の画像です。

『型が一致しません』とエラーが発生する原因の例の画像です。

このようなエラーを防ぐためには、下記のサンプルコードのように、空白箇所は処理を行わず、値が数値なのか確認する必要があります。
数値なのか確認するにはIsNumericを使用することで判定することができます。

サンプルコード


Sub 型不一致エラー対処()
    
    Dim i As Long, LastRow As Long
    
    'A列から最終行を取得
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To LastRow
        
        'F列が空白ではなく、値が数値の場合のみ処理を行う
        If Cells(i, "F").Value <> "" And IsNumeric(Cells(i, "F").Value) Then
            
            '値が300未満の場合、黄色で塗りつぶし
            If Cells(i, "F").Value < 300 Then
                Cells(i, "F").Interior.Color = vbYellow
            End If
            
        End If
        
    Next i
    
    MsgBox "処理終了"
    
End Sub
        

関連記事