簡単な計算なのにオーバーフローしてしまいます。

解決


AI  2007-12-10 05:10:06  No: 138355  IP: 192.*.*.*

for j=1 to 24
a = Workbooks(d_book).Sheets(sh).Cells(j+ 1, 2).Value/(3600*1000)
next j

このように書くと2行目でオーバーフローしましたとエラーが出ます。

a = Workbooks(d_book).Sheets(sh).Cells(j + 1, 2).Value
a = a / 3600
a = a / 1000

このように書くとちゃんと計算してくれるのですが何がいけないのでしょうか?

ちなみにセルの内容は6桁の整数です。

分かる方がいれば回答よろしくお願いします。

編集 削除
YuO  2007-12-10 08:22:34  No: 138356  IP: 192.*.*.*

VB6/VBAの整数型は16ビットだからです。
3600 * 1000 = 3600000 > 32767なので,オーバーフローしています。

3600&のように,最低でも片方が長整数型であることを明示すれば,オーバーフローしないはずです。

編集 削除
AI  2007-12-12 14:10:23  No: 138357  IP: 192.*.*.*

YuO様

アドバイス通り長整数型を宣言するとオーバーフローしなくなりました。

アドバイスありがとうございました。

編集 削除