プロが教えるわが家の防犯対策術!

VBAで除算の商を求めるには「10 \ 5」などと表記しますよね。

しかし、わからないことがあるんです。

5 \ 2.5 = 2
3 \ 1.5 = 1

上記の式っておかしくないですか?
両方とも2で割り切れるのにもかかわらず、下の式は「1」が返っている・・・・・・。
そもそも除算の商ってどういうことなのでしょうか?
お時間のあるときで結構ですので、ご教授ください。

A 回答 (2件)

こんばんは。



私の個人的な意見ですが、この「\」の算術演算子というのは、本来、データ型が決められていると思うのです。Excelのワークシートの感覚で、全部、Double型で計算するわけではないのですね。(個人的な意見と言わないと、決まりごとなど、偉そうなことを言うなとお叱りを受けましたので、ことわりを入れておきます。でも、人間ってミスする動物だと思いますね。ベテランと自負している方でも、何人も、この手のミスしています。)

× 5 \ 2.5 = 2
× 3 \ 1.5 = 1

VB6やVBA では、こういう書き方は、基本的にないと覚えておいたほうがよいと思うのです。

>除算を実行する前に、数式はバイト型 (Byte)、整数型 (Integer)、または長整数型 (Long) の式に丸められます。

ヘルプにはこう書かれていますが、Double 型やSingle型を代入してしまうと、実務ではミスが発生しやすくなるということです。私たちは、必ずしも、コーディング中で、この演算子の中の「偶数丸め」を把握できるわけではありません。そこだけを、特記して、こういうメカニズムだということは可能ですが、実際は、データ型で、把握しておくしかないと思うのです。それに、実務では、このような生の数字のリテラル値を入れるわけではありませんし。
(私の経験的な意見で、中には、天才型の人もいらっしゃって、コードをみただけで、内部の値を把握できる人もいらっしゃいますから、それが絶対的だというわけではありません。)

逆に言ったら、この「\」と 「Mod」の算術演算子は、小数点を含む数値は代入できないと思っていたほうがよいと思います。

5 は、Integer 型。2.5は、Single/Double型

ret  = 5 \ 2.5

では、うまくいかないということです。

こういう場合は、

Dim ret As Double
ret  = 5 / 2.5

となりますね。
    • good
    • 0

こちらの No5 の回答を参考にしてください。


Mod についてですが \演算子についても同じです。
http://oshiete1.goo.ne.jp/qa3456153.html

> 5 \ 2.5 = 2
> 3 \ 1.5 = 1
これは、それぞれ
 5 \ 2 = 2 余り 1
 3 \ 2 = 1 余り 1
を計算していることになります。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A