- ベストアンサー
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 と表示され セルの書式設定も数値になってるんですがどうしてでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
A = val(Cells(i, 4).Value) か A = Cint(Cells(i, 4).Value) が簡単かも。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 たぶん、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
お礼
エラーの特定方法が勉強になりました。 ありがとうございました。
- bin-chan
- ベストアンサー率33% (1403/4213)
A = Cells(i, 4).Value * 1 B = Cells(i, 5).Value * 1 C = Cells(i, 6).Value * 1 空白かどうか、IF文で判定するのが正解と思いますが、上記のようにすると、どうなりますか?
お礼
どうしてか判りませんが、やっぱり文字として認識してるようです。 Val関数を入れると普通に動きました。 ありがとうございました。