• ベストアンサー

VBAでLong型同士の乗算について

すいません。タイトルの件で Long型同士での乗算なのですが... 以下のマクロがどうしてもオーバーフローになってしまいます。 (SLはLong、Double、Variantにしてみましたが全てオーバーフロー・・) すいませんが御教授お願いします。 (普段からあまりデータ型をあまり意識してないのがバレバレですね(>_<) Option Explicit Sub Macro1() Dim AL As Long Dim BL As Long Dim SL As Variant AL = 65535 BL = 65535 Cells(1, 1) = AL Cells(1, 2) = BL SL = CVar(AL * BL) Cells(1, 3) = SL End Sub

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

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

こんばんは。 >SL = CVar(AL * BL) Long型同士で計算して、代入値のSLの精度自体をあげることは出来ないと思います。Long型の精度の上には、Currency やDouble型がありますから、以下では、Double型を使ってやってみました。 だから、もし、計算するのなら、計算値の値の型の精度を上げるか、最初の宣言で、精度を上げておかなくてはなりませんね。 たとえば、以下のようにします。 以下の方法を「型の昇格」と呼びます。 SL = AL * CDbl(BL) '片方の型の精度を上げて計算すると、計算結果の精度が上がる もしくは、型の宣言を最初からあげておくことなのです。 Dim AL As Double Dim BL As Double Dim SL As Double

koro_koro_koro
質問者

お礼

ありがとうございました。Wendy02さんには最近よくアドバイスを してもらい感謝の限りです。

その他の回答 (3)

  • Bickyon
  • ベストアンサー率41% (42/101)
回答No.4

#1です。先ほどはごめんなさい。 ALとBLもVariantで宣言したらうまく動作しました。

koro_koro_koro
質問者

お礼

いろいろ試してまでくださり、ありがとうございました。

  • Bickyon
  • ベストアンサー率41% (42/101)
回答No.3

#1です。 ごめんなさい。誤答でした。

  • Bickyon
  • ベストアンサー率41% (42/101)
回答No.1

バリアント型の変数に代入したいのであれば無視してください。 CVarを止めれば良いと思いますが... SLはLong型で宣言すれば良いと思います。

関連するQ&A