実行時エラー13「型が一致しません」の原因と直し方

公開日:2026年10月5日 執筆:Takuya カテゴリ:エラー対処

数値を期待した場所に文字列や空白、エラー値(#N/A など)が入っていると出る実行時エラー 13 について、よくある原因と、値を確認してから計算する書き方を解説します。

どんなエラーか

実行時エラー 13「型が一致しません」は、変数の型と代入しようとした値の種類が合わないときに出ます。たとえば、Long 型の変数に「abc」という文字列を代入したり、文字列と数値を足し算しようとしたりした場合です。

実務では、セルの値を計算に使うときに、そのセルに想定外の値(文字列、空白、#N/A などのエラー値)が入っていて起きることがほとんどです。マクロを作ったときのデータでは問題がなくても、別の月のデータで突然止まる、という形で表れます。

よくある原因

次のような値が、数値の列に紛れ込んでいるケースが代表的です。

  • 数式の結果がエラー値(#N/A、#DIV/0!、#VALUE! など)
  • 「-」「なし」「未定」などの文字が入力されている
  • 全角の数字「123」や、カンマ付きの文字列「1,234円」
  • 日付の列に「2026.10.5」のような日付として認識されない文字列

原因の見つけ方

デバッグで止まった行を確認し、その行で使っているセルの値を、イミディエイトウィンドウで表示します。TypeName 関数を使うと、値の種類が分かります。エラー値の場合は「Error」と表示されます。

Debug.Print TypeName(ws.Cells(i, "E").Value), ws.Cells(i, "E").Text
' 例:Double 1,234 / String 未定 / Error #N/A / Empty(空白)

値を確認してから使う書き方

セルの値を数値として使う前に、エラー値でないか、数値として扱えるかを確認する関数を用意しておくと便利です。数値にできない場合は 0 を返し、どの行に問題があったかを記録します。

Function ToNum(ByVal v As Variant, Optional ByRef ok As Boolean) As Double
    ok = False
    If IsError(v) Then Exit Function                  ' #N/A などのエラー値
    If IsEmpty(v) Then Exit Function                  ' 空白
    v = Replace(Replace(StrConv(CStr(v), vbNarrow), ",", ""), "円", "")
    If IsNumeric(v) Then
        ToNum = CDbl(v)
        ok = True
    End If
End Function

Sub SumAmount()
    Dim ws As Worksheet, i As Long, total As Double, ok As Boolean, bad As String
    Set ws = ThisWorkbook.Worksheets("明細")
    For i = 2 To ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        total = total + ToNum(ws.Cells(i, "E").Value, ok)
        If Not ok Then bad = bad & i & " "
    Next i
    MsgBox "合計:" & Format(total, "#,##0") & vbCrLf & "数値でない行:" & bad
End Sub

ポイント

IsError の確認は、ほかの判定より先に行う必要があります。エラー値に対して CStr や比較を行うと、その時点で型の不一致エラーになるためです。

また、数値にできなかった行を黙って 0 として足すと、合計が少なく出てしまいます。この記事のように問題のあった行を記録して知らせるか、処理を止めて利用者に直してもらうかを、業務に合わせて選んでください。

※全角数字の変換には StrConv(値, vbNarrow) を使っています。

ほかの記事