アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のマクロ実行時にたまにオーバーフローが出てしまい
マクロが止まってしまうときがあります。

毎回出るのであれば、原因を突き止めやすいのすが、
出なくなると全く出なくなりとても困っています。

もしわかる方がいらっしゃいましたら、御教授して頂けると
幸いです。



内容:データが元々10個単位であり、Sheet1に500×10、
Sheet2に500×10のデータを2次元配列に格納する。


Dim RES_CAM1(1 To 4000, 1 To 10) As Integer
Dim RES_CAM2(1 To 4000, 1 To 10) As Integer

Sub Macro10()
'
'
Dim i, j As Integer

....................................................
....................................................

Sheets("Sheet1").Select
For i = 1 To 500
For j = 1 To 10
RES_CAM1(i, j) = Cells((i - 1) * 10 + j, 19) ← ☆
Next j
Next i

Sheets("Sheet2").Select
For i = 1 To 500
For j = 1 To 10
RES_CAM2(i, j) = Cells((i - 1) * 10 + j, 19) ← ☆
Next j
Next i


....................................................
....................................................

End Sub



上記☆のところでオーバーフローで止まったりします。。。

A 回答 (4件)

NO.2です。



>ただやはり、Integerでもうまくいくときがあるのが???
19列(S列)の全ての値が
32,767未満だったらエラーにならないはずですが

ヘルプより
整数型 (Integer) の変数は、16 ビット (2 バイト) の変数で、
-32,768 ~ 32,767 の範囲の値をとります。
    • good
    • 0
この回答へのお礼

ありがとうございました。
意図していない箇所で32767を越えた値が入っておりました。
大変お騒がせしてごめんなさい!!

何度も本当にInteger宣言していて、32767以上が入っていない
かを確認することを気付かせてくれて本当にありがとうござい
ました。

お礼日時:2007/04/17 19:16

こんにちは。



質問の回答ではないですが。

Sheet1とSheet2に対して、同じ処理をしていますね。しかもシートを開く必要がない処理です。
たいていの処理はSelectやActineをしないで出来ます。あと、プロパティは省略しない方がいいです。
2つをまとめると

For i = 1 To 500
For j = 1 To 10
RES_CAM1(i, j) = Worksheets("Sheet1").Cells((i - 1) * 10 + j, 19).Value
RES_CAM2(i, j) = Worksheets("Sheet2").Cells((i - 1) * 10 + j, 19).Value
Next j
Next i

このようになります。どうでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。
なるほど、こっちの書き方のほうがスマートっぽいですね。

お礼日時:2007/04/16 15:17

19列(S列)の値が32,767を越えた時エラーになります。


RES_CAM1,RES_CAM2 は、LONGで宣言すべきです。

質問とは直接関係ありませんが、
Dim i, j As Integerと宣言すると
i はバリアント型になります。
Dim i As Integer, j As Integer
又は、
Dim i As Integer
Dim j As Integer
と宣言します。
    • good
    • 0
この回答へのお礼

ありがとうございました。

ただやはり、Integerでもうまくいくときがあるのが???
になっています。

お礼日時:2007/04/16 15:16

ぱっと見て思っただけですが、


Dim RES_CAM1(1 To 4000, 1 To 10) As Long
Dim RES_CAM2(1 To 4000, 1 To 10) As Long

でもダメですか?Integerで扱える範囲を超えているものがあるだけのように感じましたが…
    • good
    • 0
この回答へのお礼

ありがとうございました。
2の方もおっしゃられていたようにLongですか。
配列に入れるデータの中身が-32767~32768までだったので
Integer宣言したのがまずかったのかな。

お礼日時:2007/04/16 15:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!