[Excel VBA]剰余演算子であるModの考え方

VBA(Excel)
スポンサーリンク

 

久しぶりのExcel記事です。

剰余演算子(割り算の余りを求める演算子)であるModの考え方を書いていきます。

 

予想していた結果と違う???

 

普段、割り算の余りを求めたいってなったときに、以下のような結果を求めますよね。

 

  1.  9    ÷ 4.5 = 2   余り 0
  2.  7    ÷ 2.8 = 2   余り 1.4
  3.  8    ÷ 0.4 = 20 余り 0
  4.  9.5 ÷ 2.5 = 4   余り 0.5

 

これをExcel VBA のMod演算子を使用して式にすると、結果として下記のような割り算の余りが返ってくるはずです。

 

  1.  9    Mod 4.5 → 0
  2.  7    Mod 2.8 → 1.4
  3.  8    Mod 0.4 → 0
  4.  9.5 Mod 2.5 → 0.5

 

しかし、実際にイミディエイトウィンドウを使用して計算させると以下のように意外な結果が返ってきます。

 

  1.  9    Mod 4.5 → 1
  2.  7    Mod 2.8 → 1
  3.  8    Mod 0.4 → 0除算エラー
  4.  9.5 Mod 2.5 → 0

 

全然違いますよね。整数では正しく余りが求められるのに不思議です。

なぜ、このような結果が返ってくるのでしょうか。

それらの原因をこれから説明したいと思います。

 

Excel VBA の Mod の考え方

 

ExcelVBAのModといえば割り算の余りが返ってくる演算子であると皆さん認識されていると思います。

これはあながち間違えではありません。しかし、このModの計算に小数が入ってくると少々考え方が変わります。

 

Microsoftの説明では以下のように解説がされています。

剰余演算子は、数式 number1 を number2 で除算し、その余りを演算結果 result として返します。このとき浮動小数点数は整数に丸められます。たとえば、次に示す式では、変数 A (演算結果 result) の値は 5 になります。

 

A = 19 Mod 6.7

一方または両方の式が Null 値のときは、演算結果 result も Null 値になります。Empty 値を持つ式は、0 として処理されます。

 

これを見て分かることは浮動小数点数は整数に丸められるということ。

この中で浮動小数点数というのは小数点第一位以下を表します。

そして、【整数に丸められる】というのは四捨五入に近い意味を表します。

四捨五入に近いというのがミソで、四捨五入とは少しだけ違います。

【整数に丸められる】では、小数点以下の数値が0.5である時に1の位が偶数になるように切り捨てor切り上げられるのです。

四捨五入では0.5であれば常に切り上げられるので注意が必要です。

 

例)

  1. 3.5 → 4 (切り上げ)
  2. 6.5 → 6 (切り捨て)

 

この切り捨て切り上げ方式を銀行型丸めといいます。

 

では実際に、上記Microsoftの説明にある計算式、19 Mod 6.7 の結果を整数に丸めてみましょう。

 

19 Mod 6.7 = 5.6 →(整数に丸める)→ 6

 

しかし、Microsoftの説明では結果は【5】となっていますね。

ここでも違いがあります。ではどうして結果に違いが出るのでしょうか。

 

このMod(剰余演算子)では、計算式の結果を整数にまとめるのではなく、計算する前に計算式にある小数を整数にまとめるからです。

 

つまり、、、

19 Mod 6.7 →(整数に丸める)→ 7 = 5

ということなのです。

 

結論として、Excel VBAのMod(剰余演算子)では【計算式の小数を整数に丸めてから割り算の余りを求める】ことになります。

 

対応策

 

VBAで割り算の余りを求めるときに計算式の小数を整数に丸めたくない、ちゃんと余りを出してほしい!という方も多いでしょう。その方たちへの対応策を用意しました。

 

【Excel VBA で割り算の余りを求める関数 Modulo】

 

このコードをExcelの標準モジュールに貼り付けて以下のようなコードを書くと変数aに【5.6】が返ってきます。

 

【コード : 19÷6.7 の余りを求める】

変数a = Modulo(19,6.7)

 

他の割り算も試してみて下さい。求めていた結果が返ってくるはずです。

 

 

説明は以上となります。

いかがだったでしょうか?

 

不明な点があればお気軽にお問い合わせください!

では、ノシ

みんなに使われている仮想通貨取引所ランキング
bitbank(日本)
bitbank

日本の古参取引所の一つ。
日本には約10程度の仮想通貨取引所が国によって認証されているが、bitFlyer/Zaif/Coicheck/bitpoint等が大きな問題を起こす中で、珍しく問題を起こしていない取引所であり、国内ではほぼ唯一信頼の置ける取引所。

仮想通貨FX(レバレッジ/証拠金取引)はできない。
仮想通貨FXをやりたい場合はbitbank Tradeに登録する必要がある。
取引可能銘柄は少なめなので、海外取引所で取引するために仲介する取引所と役割付けよう。(海外取引所では円では取引できないので国内でビットコイン等を買い送金する必要がある。)

国    :日本
メリット :信頼性が高い。
デメリット:レバレッジ取引ができない。

Binance

設立して1年も経たずに世界一の取引高となった取引所。
IEO(Initial Exchange Offering)で有名。IEOとはブロックチェーンプロジェクトの発行するトークンを取引所が先行販売するサービス。これらの通過は一般に取引が開始される前に公開価格よりも安く購入することができる。
2019年現在でも新規上場される通貨は高騰する傾向にある。
個人的には取引手数料が安くなる取引所コインのBNB(Binance Coin)での取引がおすすめ。
2019年7月より仮想通貨FX(レバレッジ/証拠金取引)が可能になりました!!(2019/7/20より日本国内でも可能)

国    :中国
メリット :IEO制度。多くのメジャーなアルトコインを取り扱っている。
デメリット:

BitMEX

ビットコインFXで有名な取引所。レバレッジは最大100倍まで可能。
仮想通貨FX取引所では取引高が最も高く安定したチャートを描く。
アルトコインの先物が10種類程度存在し、期日前に取引することで差也が取れやすい。レバレッジも掛けられる。
追証がないため、入金している以上のお金が取られることもない。
指値取引であればマイナス手数料(貰える側になる)になるが、成行手数料が少し高め。
資金調達という8時間毎の手数料制度を導入しており、ロング・ショート比率の乖離が大きくなると手数料が上がる。乖離が狭まる方向にポジションを持つと8時間毎の資金調達時に同等の手数料がもらえる。この制度を導入していることで健全な取引所運営がなされている。(ロングとショートの枚数が異なり乖離が広がるほど取引所の利益になる。) 通常時の手数料は0.01%程度。
日本語にも対応していて、FX取引をやりたいなら全取引所中1番のオススメ。

国    :セーシェル
メリット :サーバが落ちにくい。
デメリット:BTC価格急変時にサーバが重くなる傾向にある。

VBA(Excel) プログラミング
スポンサーリンク
あおいうえ@仮想通貨小額分散&備忘録をフォローする
スポンサーリンク
Aoiue's memorandum

---コメント---

タイトルとURLをコピーしました