
JIS Z8401 規則Aによる数値の丸めをエクセルの関数で行ないたいと考えています。
ただし有効数字を3桁にする必要があります。
つまり有効数字4桁目以降を丸める際、「二つの隣り合う整数倍がある場合は」「丸めた数値として偶数倍のほうを選ぶ」との規則になります。
具体的には下記の様にしたいのです。
54.25→54.2
79.13→79.1
108.5→108.0
110.95→111.0
119.55→120.0
207.2→207.0
過去ログにこれに近い物もありましたがうまくいきません。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
次の方法でできると思います。
A1: 元数値
B1: =CEILING(LOG10(A1),1)
元数値の桁数を求めるためLOGを取り切り上げ。
C1: =MOD(A1,10^(B1-3))*10^(3-B1)
有効桁以外の部分を算出、および桁合わせ。
D1: =IF(ABS(C1-0.5)<0.000001,ROUND(A1/2,3-B1)*2,ROUND(A1,3-B1))
それが誤差範囲以内(※)で0.5に等しければ、1/2して丸めて2倍する。さもなくば普通に丸める。
※Excelは小数を正確に扱えないので、"等しい"を条件にすると誤差で正常に動作しない。
よって"絶対値がある小さな値以下"で書き換える。
今回の「0.000001」は適当。用途に合わせて意味のある数字の数桁下にしておけばよいと思う。
なおNo1さんのものは間違っているようです。
単なる五捨六入かと思いきやその下1桁だけ考慮しているようなので、50捨51入とでも言うのでしょうかね。
No.7
- 回答日時:
[回答番号:No.5この回答への補足]へのコメント、
ご質問の冒頭に「有効数字を3桁」と明記されている部分を見落としていました。大変失礼しました。
ゴリ押しで作成した次式を試してみてください。どうなりますか?
=IF(MOD(MID(SUBSTITUTE(A1,".",""),3,1),2)+MOD(MID(SUBSTITUTE(A1,".",""),4,9)/10^(LEN(MID(SUBSTITUTE(A1,".",""),4,9))-1),5),ROUND(A1,3-ROUNDUP(LOG(A1),0)),ROUNDDOWN(A1,3-ROUNDUP(LOG(A1),0)))
No.6
- 回答日時:
#4 の回答者です。
すでに回答はあるようですが、「偶数丸め」というのは、もともと、コンビュータの統計の際に、誤差を少なくするために発案された、特別な丸める方法と解釈していました。だから、上位桁から4桁目を丸めても、あまり意味がないのではないかと思いました。
>今回はとりあえず関数で作成してみます。
また、関数で行う、マクロでも可能かという主旨は、最初に提示していただいたほうがよいです。関数の得意な方は大勢いらっしゃるようですから、私などが書いても、レスはゴミになってしまうかもしれません。
なお、数式の回答として掲示しておきます。
=IF(MOD(MOD(INT(A1*10^(2-INT(LOG(A1)))),10),2),ROUND(A1,2-INT(LOG(A1))),ROUNDDOWN(A1+0.49*10^(INT(LOG(A1))-2),2-INT(LOG(A1))))
なお、これは、負数は入れると、LOG関数にエラーが発生します。
No.5
- 回答日時:
》 具体的には下記の様にしたい
提示された例では、JIS で言うところの「丸めの幅」が統一されておりませんが、ソコントコはどう考えていますか?
この回答への補足
JIS Z8401 で言うところの「丸めの幅」に付いて私の理解では小数点以下何桁、あるいは10の位、100の位等のどこで丸めるのかの規則かと思っておりますがそれでよろしいのでしょうか。
質問の内容が不十分だったのですが、「有効数字を3桁にする必要」と言うのは別の JIS G3444 STK で表記されている重量の計算基準に基づいているものです。
説明不足で申し訳ありませんでした。
No.4
- 回答日時:
こんにちは。
それは、「JIS丸め」とか、「最近接丸め」というものだと思いますが、
>有効数字4桁目以降を丸める際、
>「二つの隣り合う整数倍がある場合は」「丸めた数値として偶数倍のほうを選ぶ」との規則になります。
(上位から)有効桁数を持ち出している時点で、原則自体は、変則的になっていますね。偶数丸め自体は、Excel VBAには備わっているのですから、それを使わない手はありませんね。ただし、VBA.Round は、マイナス値は入れられません。
有効桁数3となっているのですから、以下のようにしたら良いと思います。
-------------------------------------------------------------
Function VBRound(rng As Range) As Double
Dim k As Long '桁
Dim i As Long
Dim v As Double
Dim sn As Integer
Const N As Integer = 2 '有効桁 -1
sn = Sgn(rng.Value) '符号
v = Abs(rng.Value) '絶対値
i = Int(Log(v) / Log(10))
If i >= N Then
k = 0
Else
k = N - i '小数点
End If
If i > N Then
i = i - N
VBRound = VBA.Round(Int(v / 10 ^ i), k) * 10 ^ i * sn
Else
VBRound = VBA.Round(v, k) * sn
End If
End Function
他の方とそれほど結果は変わりませんが、
0.1234
-13.5512
こういう値で、変わってきます。
ありがとうございます。
今回はとりあえず関数で作成してみます。
ただし次の段階でVBAも必要になってくるかと思われますので、その際参考にさせていただきます。
No.3
- 回答日時:
こんな感じかなぁ……
演算式でやろうと思ったら、かなり長ったらしくなってしまいました。
=ROUND(A1-(0.5*10^(INT(LOG(A1))-2))*(MOD(INT(A1*(10^(3-INT(LOG(A1))))),10)=5)*ISEVEN(MOD(INT(A1*10^(2-INT(LOG(A1)))),10)),2-INT(LOG(A1)))
これは、ユーザ関数を作ってやった方が良いでしょうね。
Function fMarume(Target As Range) As Double
Dim figure As Long
Dim TargetFig As Integer
Dim TargetWork As Long
figure = 3 '有効桁数
TargetFig = Int(Log(Target) / Log(10)) 'ターゲットの桁数を把握
TargetWork = CLng(Target * 10 ^ (figure - TargetFig)) '有効桁数+1桁で整数化 ex)54.25→5425
'4桁目が5で3桁目が偶数なら、4桁目を0に ex)5425→5420
If (TargetWork Mod 10 = 5) * (Int(TargetWork / 10) Mod 2 = 0) Then
TargetWork = TargetWork - 5
End If
'整数→実数して四捨五入 ex)5420→54.20→54.2
fMarume = WorksheetFunction.Round(TargetWork * 0.1 ^ (figure - TargetFig), figure - 1 - TargetFig)
End Function
No.1
- 回答日時:
JIS Z8401 規則Aはよくわかりませんので少ししらべましたが、恐らくこういった結果でいいのでしょうか?(かなり無理やりですが^^;)
A 元となる数字
B =+A1*1000
C =LEFT(B1,5)
D =IF(AND(MID(C1,4,1)="5",RIGHT(C1)="0"),ROUNDDOWN(C1,-2),ROUND(C1,-2))
E =LEN(B1)
F =D1/10^(8-E1)
Fが計算結果です。
A B C D E F
1 54.25542505425054200554.2
2 79.13791307913079100579.1
3 108.510850010850108006108
4 110.9511095011095111006111
5 119.5511955011955120006120
6 207.220720020720207006207
こんな感じで例題のとおりの結果になります@@
3桁をそろえるより、丸めの幅をそろえるもののように見えましたが?
まあ、よくわかりませんがパズル感覚で暇つぶしになりました。参考にどうぞ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- 物理学 丸め 5 2022/08/04 12:25
- Excel(エクセル) 数列の数値補間 2 2022/10/27 16:38
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- 大学受験 合同式 2 2022/08/19 13:12
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- その他(Microsoft Office) Excelの関数(FILTER関数)について教えてください 2 2023/07/31 16:11
- Excel(エクセル) 【エクセル関数】アルファベットで以上だったらカウントする 4 2022/07/09 14:07
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
数値の丸め方
工学
-
丸め
物理学
-
エクセルで有効桁を指定して丸めることは出来る?
Excel(エクセル)
-
-
4
エクセル(Excel)で、数値を一定の有効数字で表示したいのですが…
Excel(エクセル)
-
5
数値の丸め方について
数学
-
6
「小数点以下2桁」と「小数点2桁」
数学
-
7
規格値に対する実測値の扱いについて
その他(ビジネス・キャリア)
-
8
数値の丸め方
その他(形式科学)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル:6E-05という表現は?
-
2進数の割り算が分かりません...
-
数字3桁の組み合わせの何通り...
-
3分の1とは何パーセントでしょ...
-
数値とアルファベットに分ける...
-
7で始まる電話番号?
-
数学の階乗はどんな時に使うの...
-
3÷7のあまりは「3」ですか?
-
NUMBER(N,M) としたときの、格...
-
電話番号のハイフンの入れ方
-
EXCELで10万未満切捨ての...
-
エクセル関数で桁数指定し数値...
-
関数電卓の表示方法を変更したい
-
1から1000までの1は何回でるの?
-
算数です。 割り算の筆算で、商...
-
AccessでExcelでのMOD関数と同...
-
10進法の数を60進法の数に...
-
√2の値はなぜ1.414…になるんで...
-
モジュロ2除算ってどうやるの?
-
です。 0.008020 の有効数字は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル:6E-05という表現は?
-
2進数の割り算が分かりません...
-
7で始まる電話番号?
-
数字3桁の組み合わせの何通り...
-
数値とアルファベットに分ける...
-
数学の階乗はどんな時に使うの...
-
3÷7のあまりは「3」ですか?
-
エクセル関数で桁数指定し数値...
-
関数電卓の表示方法を変更したい
-
EXCELで10万未満切捨ての...
-
電話番号のハイフンの入れ方
-
3分の1とは何パーセントでしょ...
-
0以下の数字は何桁?
-
エクセルのsumifの検索値
-
NUMBER(N,M) としたときの、格...
-
Excelで数値の丸め
-
エクセルの計算式で割り切れる...
-
10進数で123を2進数で表わすと...
-
小数と分数を2進数に直すやり方...
-
Excelでの有効数字の合わせ方に...
おすすめ情報