No.8ベストアンサー
- 回答日時:
こんにちは。
通常、偶数丸め(銀行型丸め)というと思いますが、ExcelのVBAでは、偶数丸めというのは、Excel2000 から採用されましたので、歴史的にも浅いです。いわゆる、2進の計算で、浮動小数点誤差丸めに、正式な名称「最近接偶数丸め」として出てくるだけで、実務上でワークシートなどで使う場を知りません。統計には出てくるそうですが、なぜ、銀行型丸め(Banker's Rounding)というのか、そういう歴史的な背景を私は知りません。
ご質問者さんが、どういう状況で必要になるのか少し興味を持ちました。以前にもそのような質問に出会ったことがありました。
現実的な対応は、VBAのユーザー定義関数を使うにしても、原理は、以下のようになるはずです。以下の数式を見れば分かるとおり、
丸める桁が、奇数の場合、その下の桁の数字を四捨五入、偶数の場合は、下の桁が上の桁の半分よりも小さい場合は切り捨てになりますね。
=IF(MOD(INT(MOD(ABS(A1),10)),2),
SIGN(A1)*ROUND(ABS(A1),0),
SIGN(A1)*ROUND(ROUNDDOWN(ABS(A1),0)+(ABS(A1)>(ROUNDDOWN(ABS(A1),0)+0.5))*0.5,0))
小数点第一位の場合は、
=IF(MOD(INT(MOD(ABS(A1)*10,10)),2),
SIGN(A1)*ROUND(ABS(A1),1),
SIGN(A1)*ROUND(ROUNDDOWN(ABS(A1),1)+(ABS(A1)>(ROUNDDOWN(ABS(A1),1)+0.05))*0.05,1))
少し、数式は、ややこしいですが、理屈は、単純なことだ思います。
質問者さんが、銀行型丸めを要求している話で、既存のVBAのRound関数をそのまま使う分には、出された結果がそのとおりだと思います。
>少数桁が大量にあった場合(?)は、どのように設定すればよろしいでしょうか。
>このVBAをしようした場合の有効桁は2ケタということになりますでしょうか。
そのままの計算でしたら、有効桁数は関係ないのではありませんか?
つまり、浮動小数点の無限小数が存在していても、判定が、その半分よりも大きい・小さいには、有効桁数はありませんね。
>たとえば、2.501だった場合は「2」にはならず「3」になるということでしょうか。
私が説明してよければ、こういうことになると思います。
1桁で丸める場合は、1桁が偶数2だから、その下の桁の数値0.501が、丸める桁の半分0.5よりも多いので、四捨五入されて、3になります。2.5でしたら、半分[よりも]大きくない(以上ではなくて)ので、切捨てになるという仕組みだと思います。だから、Excelの仕様の小数点第16位以降は別としても、基本的には有効桁数は関係ありませんね。
ただ、私は実際には出会ったことのない計算です。
No.7
- 回答日時:
No.5です。
> このVBAをしようした場合の有効桁は2ケタということになりますでしょうか。
2桁というか、五捨五入はNo.3の方に補足にあなたも書かれているように、
「丸め単位の丁度まんなかで、どっちつかずの場合は、偶数側を採用する」
なので、2.5なら丁度まんなかですが、2.51にした時点で真ん中にならなくなります。なので3になってしまいます。
2.51…(あとも続く)を2に丸めたいときは、いったん小数点以下第2位で切り捨てを行い、それを五捨五入するという方法があります。
=Round5(ROUNDDOWN(2.51,1),0)
とすると、2.51がいったん2.5に丸められ、それが五捨五入されて2という結果になります。
No.6
- 回答日時:
銀行型丸め と言われているものです。
こちらの解説が詳しいです。
丸めを行うカスタム プロシージャを実装する方法
http://support.microsoft.com/default.aspx?scid=k …
No.5
- 回答日時:
本当ですね、VBAのRound関数は五捨五入ですね。
私もはじめて知りました。これを利用したユーザ定義関数です。
Alt+F11でVBAの画面を開き、左側のツリーからブック名を選択し、右クリックから「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。
Function Round5(N As Double, Optional e As Integer) As Double
Round5 = Round(N, e)
End Function
貼り付けたらVBAの画面は閉じてかまいません。
使い方はワークシート関数のROUNDと同じです。
シート上で、
=Round5(2.5) とすると2に、
=Round5(3.5) とすると4に、
=Round5(0.25,1) とすると0.2に
=Round5(0.35,1) とすると0.4にそれぞれなります。
この回答への補足
貴重な回答をありがとうございます。
ご質問なのですが、このVBAをしようした場合の有効桁は2ケタということになりますでしょうか。たとえば、2.501だった場合は「2」にはならず「3」になるということでしょうか。
少数桁が大量にあった場合(?)は、どのように設定すればよろしいでしょうか。
No.3
- 回答日時:
五捨五入ということですが 5はどう処理されるのでしょうか?
ちなみにROUND関数は四捨五入です。
ユーザー定義を使用しなくても、通常の関数として用意されています。
http://allabout.co.jp/study/pcbasic/closeup/CU20 …
表示形式だけを変更して、データは変えずに見た目だけを
小数点以下四捨五入も可能です。
http://www.relief.jp/itnote/archives/000432.php
この回答への補足
「偶数丸め」は四捨五入とほぼ同一ですが、次の1点が違います。
「丸め単位の丁度まんなかで、どっちつかずの場合は、偶数側を採用する」
したがって、1.25 を 0.01 の位で丸めると 1.2 になり、1.35 は 1.4 になり
ます。
No.2
- 回答日時:
詳細が分からないので簡単なサンプルです。
小数点以下2桁を1桁に五捨五入します。
エラー処理等はしていません。
Function Round55(Rng As Range) As Double
Dim myR As Double
myR = Rng.Value
Round55 = Round(Rng, 1)
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
夏が終わったと感じる瞬間って、どんな時?
まだまだ暑い今日この頃。 しかしながら、もう夏は終わっている!……はず。 あなたが思う「夏が終わった!」エピソードを教えてください。
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
五捨五入(偶捨奇入)の数学的意義と四捨五入との関係
数学
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル:6E-05という表現は?
-
数字3桁の組み合わせの何通り...
-
数値とアルファベットに分ける...
-
2進数の割り算が分かりません...
-
3÷7のあまりは「3」ですか?
-
7で始まる電話番号?
-
数学の階乗はどんな時に使うの...
-
60進法と10進法
-
NUMBER(N,M) としたときの、格...
-
1,2,3,4の並び順
-
電話番号のハイフンの入れ方
-
3分の1とは何パーセントでしょ...
-
EXCELで10万未満切捨ての...
-
Excelで数値の丸め
-
3桁の数字は何通りですか?
-
10進法の数を60進法の数に...
-
エクセル関数で桁数指定し数値...
-
【場合の数】 2桁の自然数で、2...
-
1から1000までの1は何回でるの?
-
1の位が0の時の少数第一位
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字3桁の組み合わせの何通り...
-
3÷7のあまりは「3」ですか?
-
エクセル:6E-05という表現は?
-
2進数の割り算が分かりません...
-
数学の階乗はどんな時に使うの...
-
7で始まる電話番号?
-
数値とアルファベットに分ける...
-
電話番号のハイフンの入れ方
-
EXCELで10万未満切捨ての...
-
NUMBER(N,M) としたときの、格...
-
0以下の数字は何桁?
-
3分の1とは何パーセントでしょ...
-
60進法と10進法
-
一億引く百が苦手なめい
-
10進数で123を2進数で表わすと...
-
エクセル関数で桁数指定し数値...
-
0.120は有効数字何桁ですか? ...
-
3桁の数字は何通りですか?
-
√2の値はなぜ1.414…になるんで...
-
AccessでExcelでのMOD関数と同...
おすすめ情報