電子書籍の厳選無料作品が豊富!

環境
Excel2003
Win7 64bit

--------------
Const C as Currency = 50000000

Sub Test()
  Dim A as Currency
  Dim B as Currency

  B = 6823695200
  A = B \ C '←ここでオーバーフロー
End Sub
---------------

「A = B \ C」
↑この式はオーバーフロー時、ウォッチ式上では、
型: Integer と表示されますが、これも不思議。

また、「A = B \ C」を、
A = CCur(B) \ CCur(C)
としても、オーバーフロー。

それと、
「Const C as Currency = 50000000」を、
「Const C = 50000000」 としても、同様にオーバーフロー。

Currency型は、
-922,337,203,685,477.5808~922,337,203,685,477.5807
のはず。

このオーバーフローは、一体なぜ?

A 回答 (5件)

>どのようにして行えば良いのでしょうね。



No2です。
先のの回答に書いたんですけどねぇ。
A = Int(B / C)
通常の余算演算子 / を使用します。
小数点以下を切り捨てる場合は Int() 関数で切り捨てます。

この回答への補足

http://detail.chiebukuro.yahoo.co.jp/qa/question …

こちらに方法がありました。
こちらで解決するか、とりあえずやってみたいと思います。
ダメそうなら、また戻ってきます(笑)

補足日時:2014/02/28 08:21
    • good
    • 0
この回答へのお礼

度々、ありがとうございます。

>先のの回答に書いたんですけどねぇ。
>A = Int(B / C)

気付かず、すみませんでした。
追加でお聞きしたいのですが、

-------

Dim D as Long

D = B Mod C '←オーバーフロー

-------

こちらについては、どう考えればよろしいでしょうか。
また宜しければ、教えて下さい。

お礼日時:2014/02/28 08:13

>それより上(つまり、Long以上)であった場合にも、


このコードは使えますでしょうか。

\、Modはやや特殊な演算子なので整数型という制限があります。
他には論理演算子も整数型を対象とした演算子です。
その他の演算子(+,-,*,/ など)は全ての型で使用できます。
    • good
    • 1
この回答へのお礼

大変よく分かりました。助かります。
この度は何度も回答して頂き、ありがとうございました。

お礼日時:2014/02/28 19:23

>D = B Mod C '←オーバーフロー


>こちらについては、どう考えればよろしいでしょうか。

Mod演算子も\演算子と同様に除数と被除数はどちらも整数型であることが必要です。
BとCの型と数値が最初の質問の通りなら整数型に自動変換されるタイミングでオーバーフローが発生します。
\演算子とMod演算子は整数型専用の演算子と思ってください。
A = Int(B / C)
D = B - (C * A)
    • good
    • 0
この回答へのお礼

またしても、ありがとうございます。

>A = Int(B / C)

初歩的な質問なのですが、
B/C の計算結果(つまり、その値)が、Integer型(整数型)ではなく、
それより上(つまり、Long以上)であった場合にも、
このコードは使えますでしょうか。
使えない場合には、使えるものを教えて頂けると非常に有り難いです。
何度もすみません。宜しくお願い致します。

お礼日時:2014/02/28 10:48

\ 演算子 この演算子の場合、除数と被除数はどちらも整数型であることが必要です。


他のデータ型で使用した場合は内部処理で整数型に自動変換されて実行されます。
今回の場合は Currency型→整数型 の内部処理でオーバーフローが発生した。

A = Int(B / C)
    • good
    • 0
この回答へのお礼

なるほど。
では、Currency型(というか、大きな数値)の割り算は、
どのようにして行えば良いのでしょうね。
もし、お分かりでしたら教えて下さい。

お礼日時:2014/02/28 04:02

¥演算子の精度が、通貨型よりも低いから?

    • good
    • 0
この回答へのお礼

早速の回答をどうもありがとうございます。
「精度」という言葉に、そんなものがあるのかと面食らいました。

では、このような場合、どうしたら良いでしょう?
もし、お分かりでしたら教えて下さい。

お礼日時:2014/02/28 01:45

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