エクセルマクロ・VBA達人養成塾 小川です。
キューバ旅行記、その67です。
ビニャーレスの谷からハバナへ。そして、さらにバラデロビーチへ。
まずは、ビニャーレスの谷からハバナへ。バスで3時間の道中。
ビニャーレスの谷からハバナへバスの、休憩所でのヒトコマ。
ビニャーレスの谷からハバナへバスの、休憩所でのフタコマ。
ビニャーレスの谷からハバナへバスの、休憩所でのミコマ。
ということで、ハバナのバスステーションに到着。この時点で、16時半。
これから1時間半ほどまって、18時のバスで、バラデロに向かいます。
今日は、いきなりサンプルコードを。
Range(“B1”).Value = WorksheetFunction.Round(0.5, 0)
Range(“B2”).Value = WorksheetFunction.Round(1.5, 0)
Range(“B3”).Value = WorksheetFunction.Round(2.5, 0)
Range(“B4”).Value = WorksheetFunction.Round(3.5, 0)
Range(“B5”).Value = WorksheetFunction.Round(4.5, 0)
Range(“B6”).Value = WorksheetFunction.Round(5.5, 0)
Range(“B7”).Value = WorksheetFunction.Round(6.5, 0)
Range(“B8”).Value = WorksheetFunction.Round(7.5, 0)
End Sub
結果は、こうなります。
|A |B |
---------------
1 行目 |0 |1 |
---------------
2 行目 |2 |2 |
---------------
3 行目 |2 |3 |
---------------
4 行目 |4 |4 |
---------------
5 行目 |4 |5 |
---------------
6 行目 |6 |6 |
---------------
7 行目 |6 |7 |
---------------
8 行目 |8 |8 |
---------------
B列は、Worksheetfunction.Roundを使った結果。
A列は、Roundを使った結果です。
B列は、フツーの四捨五入をしていますが、A列は、「銀行型丸め」とも呼ばれる、特別な端数処理をしています。
「銀行型丸め」では、「端数がちょうど0.5なら切り捨てと切り上げのうち結果が偶数となる方へ丸める」というルールになっています。
どうしてこういう端数処理方法があるのかというと。
例えば。
以下のようなデータがあったとき。
データ1: 1.5
データ2: 0.5
データ3: 1.5
データ4: 0.5
データ5: 1.5
データ6: 0.5
データ7: 1.5
データ8: 0.5
データ9: 1.5
その合計を計算してみましょ。合計は、いくつになりますか?
…というと、まー、「9.5」になるんですが。
四捨五入してからその平均を取ると。
データ1: 2
データ2: 1
データ3: 2
データ4: 1
データ5: 2
データ6: 1
データ7: 2
データ8: 1
データ9: 2
としてから合計を取るわけですから、「14」なわけです。
…これ、実態と著しくかけ離れていますね。
ところが。
「銀行型丸め」してからその合計を取ると。
データ1: 2
データ2: 0
データ3: 2
データ4: 0
データ5: 2
データ6: 0
データ7: 2
データ8: 0
データ9: 2
の合計を取るので、これは、「10」となります。
生データの平均は、「9.5」でした。こちらのほうが、実態と近いですね。
てことで。
要は、
「0.5はくり上げ!」と決めているよりは、
「0.5については、くり上げるからくり下げるかは、フィフティー・フィフティーの確率!」
としておいたほうが、丸めたあとの値に信頼性が高い、ということです。
で、VBAのRound関数は、「銀行型丸め」をしているんですね。
ただ、「銀行型丸め」を普段から意図して使っている人はあまりいないですね。
それこそ、金融のやや特殊な仕事をしている人とかです。
特にそこまで考えず、「四捨五入」の計算をしたいということでしたら、
Worksheetfunction.Round を使ってください。
以下の動画で関連する内容がご覧いただけます。
ではでは ヾ(´ー`)ノ