• ベストアンサー

VBAで実行時エラー'13': がでます

初歩の初歩ですいません。 VBAで Dim A As Integer Dim B As Integer Dim C As Integer Dim gokei As Integer For i = 8 To 70 A = Cells(i, 4).Value B = Cells(i, 5).Value C = Cells(i, 6).Value goukei = A + B + C Cells(i, 7) = goukei Next i としていますが A = Cells(i, 4).Value のところで今使っているシートだと止まってしまいます。 新規でワークシートを使って仮に数字を代入すると普通に動きます。 今使っているシートもセル内には =100 と入力して 100 と表示され セルの書式設定も数値になってるんですがどうしてでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

A = val(Cells(i, 4).Value) か A = Cint(Cells(i, 4).Value) が簡単かも。

MOTOKAME
質問者

お礼

どうしてか判りませんが、やっぱり文字として認識してるようです。 Val関数を入れると普通に動きました。 ありがとうございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 たぶん、VBAの練習の中での質問ではないかと思います。 こういうのは、難しく考えると、難しいです。データ型が問題のようです。 もともとワークシート上では、Integer 型は存在しないから、空白でないこと、-32768 ~ 32767の数値の範囲にあるかを判定するか、CInt で、エラーが出ないか、エラートラップで判定するかぐらいしかありません。ワークシートの数値は、Currency 型とDouble 型だけです。 ある教本では、入門時から、データ型を入れないといっているものもあります。そういう瑣末なことを最初から覚えようとしたら、必ず、混乱してしまいます。 Excelのワークシートのデータ型は何かというのは、VBそのものよりも、あらかじめ決められている分だけややこしいです。 もし、練習なら、なるべくVBE上で数値を代入して使ったほうが良いです。 練習でしたら、ワークシートの計算範囲のセルが空欄や文字になっていないかチェックして、空欄や文字になっていら、0 を入れてください。SUM関数を使う方法もありますが、いきなり、ワークシート関数を使ったら、基本的なことを覚えられないです。 最初は、Dimで宣言するなら、データ型自体を入れないで、Variant 型にしたほうがよいです。 例 Dim A, B, C 難しい方法のは、後回しにしたほうがよいです。 '------------------------------------------- ''なぜ、エラーになるか意味が分からないなら、エラートラップを以下のように入れます。 Sub Test1()   Dim i As Integer   Dim A As Integer '゛本来は、Double   Dim B As Integer   Dim C As Integer   Dim gokei As Integer      On Error Resume Next 'エラートラップの種類のひとつ   For i = 8 To 70     A = Cells(i, 4).Value     B = Cells(i, 5).Value     C = Cells(i, 6).Value     goukei = A + B + C     Cells(i, 7) = goukei   Next i   On Error GoTo 0 End Sub '------------------------------------------- ''エラーになる原因を、ひとつずつなくす方法。 Sub Test2()   Dim A As Integer   Dim buf As Variant   Dim i As Long, j As Long   For i = 8 To 70     For j = 4 To 6       buf = Cells(i, j).Value       If buf <> "" And IsNumeric(buf) = True Then 'エラーを除く         If buf >= -2 ^ 15 And buf <= 2 ^ 15 - 1 Then           A = A + Cells(i, j).Value         End If       End If     Next j     Cells(i, 7).Value = A     A = 0   Next i End Sub '------------------------------------------- 'ワークシート関数を使う。 Sub Test3()    With Range("G8:G70")     .Formula = "=SUM(D8:F8)"     .Value = .Value '値コピー    End With End Sub

MOTOKAME
質問者

お礼

エラーの特定方法が勉強になりました。 ありがとうございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

A = Cells(i, 4).Value * 1 B = Cells(i, 5).Value * 1 C = Cells(i, 6).Value * 1 空白かどうか、IF文で判定するのが正解と思いますが、上記のようにすると、どうなりますか?