- ベストアンサー
エクセルVBAでオーバーフローが発生する理由とは?
- エクセルVBAでオーバーフローが発生する理由について解説します。具体的なコードとともに、オーバーフローが起こる条件とその対処法について説明します。
- エクセルVBAで使用するCurrency型の範囲や特徴について解説します。Currency型の最大値や最小値、およびデータ型の変換方法について詳しく説明します。
- エクセルVBAでオーバーフローが発生する具体的な例を紹介します。特定の操作や計算によってオーバーフローが発生することを示し、解決策を提案します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>どのようにして行えば良いのでしょうね。 No2です。 先のの回答に書いたんですけどねぇ。 A = Int(B / C) 通常の余算演算子 / を使用します。 小数点以下を切り捨てる場合は Int() 関数で切り捨てます。
その他の回答 (4)
- uruz
- ベストアンサー率49% (417/840)
>それより上(つまり、Long以上)であった場合にも、 このコードは使えますでしょうか。 \、Modはやや特殊な演算子なので整数型という制限があります。 他には論理演算子も整数型を対象とした演算子です。 その他の演算子(+,-,*,/ など)は全ての型で使用できます。
お礼
大変よく分かりました。助かります。 この度は何度も回答して頂き、ありがとうございました。
- uruz
- ベストアンサー率49% (417/840)
>D = B Mod C '←オーバーフロー >こちらについては、どう考えればよろしいでしょうか。 Mod演算子も\演算子と同様に除数と被除数はどちらも整数型であることが必要です。 BとCの型と数値が最初の質問の通りなら整数型に自動変換されるタイミングでオーバーフローが発生します。 \演算子とMod演算子は整数型専用の演算子と思ってください。 A = Int(B / C) D = B - (C * A)
お礼
またしても、ありがとうございます。 >A = Int(B / C) 初歩的な質問なのですが、 B/C の計算結果(つまり、その値)が、Integer型(整数型)ではなく、 それより上(つまり、Long以上)であった場合にも、 このコードは使えますでしょうか。 使えない場合には、使えるものを教えて頂けると非常に有り難いです。 何度もすみません。宜しくお願い致します。
- uruz
- ベストアンサー率49% (417/840)
\ 演算子 この演算子の場合、除数と被除数はどちらも整数型であることが必要です。 他のデータ型で使用した場合は内部処理で整数型に自動変換されて実行されます。 今回の場合は Currency型→整数型 の内部処理でオーバーフローが発生した。 A = Int(B / C)
お礼
なるほど。 では、Currency型(というか、大きな数値)の割り算は、 どのようにして行えば良いのでしょうね。 もし、お分かりでしたら教えて下さい。
- bin-chan
- ベストアンサー率33% (1403/4213)
¥演算子の精度が、通貨型よりも低いから?
お礼
早速の回答をどうもありがとうございます。 「精度」という言葉に、そんなものがあるのかと面食らいました。 では、このような場合、どうしたら良いでしょう? もし、お分かりでしたら教えて下さい。
お礼
度々、ありがとうございます。 >先のの回答に書いたんですけどねぇ。 >A = Int(B / C) 気付かず、すみませんでした。 追加でお聞きしたいのですが、 ------- Dim D as Long D = B Mod C '←オーバーフロー ------- こちらについては、どう考えればよろしいでしょうか。 また宜しければ、教えて下さい。
補足
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1082307450 こちらに方法がありました。 こちらで解決するか、とりあえずやってみたいと思います。 ダメそうなら、また戻ってきます(笑)