- ベストアンサー
VBAのデータ型に関する質問です。 以下のような宣言と処理をしました。
VBAのデータ型に関する質問です。 以下のような宣言と処理をしました。 Dim 数値1 As Integer Dim 数値2 As Integer Dim 数値3 As Long 数値1=Range("b5").Value 数値2=Range("c5").Value 数値3=数値1*数値2 この式では、数値3がLongの型ではなくIntegerになってしまいオーバーフローのエラーになってしまいます。(10000×5の場合等)Long型のまま代入する方法がありましたら教えてください。よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
数値3はlong型で宣言してあるので、long型だと思います。 この場合は数値1*数値2の時点でinteger型×integer型なので、 代入以前の演算の段階でオーバーフローが発生すると思われます。 全ての変数をlong型で宣言するのはどうでしょうか? integer型というのは1世代前のプログラミング概念による変数型です。 当時は8ビットまたは16ビット処理だったのでinteger型がコンパクトで 処理も速かったのです。 しあkし、現在では32ビットまたは64ビット処理なので、long型の 方が都合がいいのです。今のinteger型は以前のプログラムと互換性を 保つためにあり、long型の半分をマスクしているに過ぎず、32ビット ずつメモリーを消費します。つまり、integer型のメリットは無くなって いるのです。 それから、厳密に言えばセルの値はバリアント型です。 Long型=variant型 でもプログラムは自動的に左辺の型に合わして くれますが、正式にはint関数をかませたほうがいいでしょう。
その他の回答 (1)
- junichihirobe
- ベストアンサー率20% (5/24)
Dim 数値1 As Integer Dim 数値2 As Integer の部分のIntegerをLong にすればできる。
お礼
ありがとうございました。
お礼
質問以上の回答をしていただき、とても感謝しております。 お忙しい中ありがとうございました。