[[20050907183703]] 『JIS丸め関数を作りたい』(ぱっくん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『JIS丸め関数を作りたい』(ぱっくん)

 マクロ初心者です。
 以下のシートにて計算していますが、重量と桁数を与えたら結果を
 返してくれる関数を作りたいのですが、実力が無いのでサポート
 してもらえたらな・・と虫の良いことを考えています。

 仕様:
 1)有効数字が指定された桁数以下の場合は入力値
 2)有効数値の指定された桁数+1桁の数値が5以外は有効数値を四捨五入
 3)有効数値の指定された桁数+1桁の数値が5でかつ
   有効数値の指定された桁数の数値が奇数或いは
   有効数値の指定された桁数+2桁の数値がゼロ以外は、有効数値を切上げ
 4)上記以外は有効数値を切捨て

 <シート構成と関数式(桁数3桁の場合)>
    A	  B	C	D	E	G
 1 重量	 3桁目	4桁目	5桁目	加算値  結果
 2 46.1	  1	0	0	0	46.1
 3 78.37  3	7	0	0.05	78.4

 A:入力
 B:有効桁数位置の一文字を取り出し
 C:有効桁数+1桁位置の一文字を取り出し
 D:有効桁数+2桁位置の一文字を取り出し
 E:切捨て(0)、四捨五入(5)、切り上げ(9)を小数位置を考慮してセット
 G:JIS丸め後の値

 E2=IF(LEN(SUBSTITUTE(A2,".",""))<4,0,         ;有効桁以下は加算なし
     IF(C2<>"5",5/10^(5-FIND(".",A2,1)),       ;有効桁+1桁目が「5」以外は四捨五入(ex.0.05)
      IF(OR(MOD(C2,2)=1,D2<>0),                ;有効桁+1桁目が奇数又は+1桁目が0以外は
       9/10^(5-FIND(".",A2,1)),                ;   切上げ(ex.0.09)
       0
      )
     )
    )

 以上 よろしくお願いします。
 (ぱっくん)

 VBA関数のRoundがそのものだそうです。LOOKUPのエクセルでは、確認できません。 (LOOKUP)
http://support.microsoft.com/default.aspx?scid=kb;ja;JP225330 

 さっそくの回答ありがとうございます。
 Function jRound(y, n)
  jRound = Round(y, n)
 End Function

 E2=jRound(A2, 0)
 ・・ということですか?
 但し、有効桁数を渡すのは無理で、丸め位置は自分で計算してnを渡す
 ことが必要ですね。 
 上記のjRound関数内にロジック追加をどうすればいいかご指導して
 いただきたいです。おんぶに抱っこですいません。
 (ぱっくん)

 すでにお断りしていますが、わたしのエクセルでは、VBAのRoundは使用できません。
 こちらが参考になると思いますので、ご覧下さい。↓             (LOOKUP)
http://park7.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200501/05010109.txt

 (LOOKUP)師匠
 >わたしのエクセルでは、VBAのRoundは使用できません。
 → 気分を損ねてしまったようでしたら非常に申し訳ありません。
 ご紹介いただいたhpを確認させていただきます。
 ※因みに、提示させていただいた仕様をROUND関数を使わないで実現化するコード
   を指導いただける方がおられたましたらお願いします。(マクロの勉強が目的です。)
 (ぱっくん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.