概要 ▶ 用紙の重さをExcelの計算で求めてみます。値は小数点第一位を2捨3入7捨8入した0.5刻みなので、これをExcelの関数を使って求めてみるチャレンジです。
紙の重さは四六判で90kgとか110kgとか135kgとか、そういう話なのですが、四六判の重さが分かれば、菊判やA判の重さも計算で分かるという話をし、Excelで一覧表を作ってみようという話になりました。
そうしてExcelで計算すると、どうも小数点が細かく出てしまったり、小数点第一位が紙の重さでは普段見ない1とか2とかだったりするので「計算だとメーカーの用紙見本にない重さでしか出ないからある程度の参考にしかならないね…」とか言ってしまいました。
調べてみると、用紙の重さの計算は「4捨5入」ではなく「2捨3入7捨8入」という私は聞いたことがない謎の切り上げ切り捨て計算をやっているそうです。わけがわからん…。
連量数値は小数点1位を2捨3入7捨8入して整数、または、0.5kg単位として求め、表示します。
紙の基礎講座(6) 紙の品質とトラブル対応あれこれ(その5) - 紙の基礎講座 - 紙への道
つまりこういうことです。
- 1.0 → 1.0
- 1.1 → 1.0
- 1.2 → 1.0
- 1.3 → 1.5
- 1.4 → 1.5
- 1.5 → 1.5
- 1.6 → 1.5
- 1.7 → 1.5
- 1.8 → 2.0
- 1.9 → 2.0
- 2.0 → 2.0
- 2.1 → 2.0
- 2.2 → 2.0
- 2.3 → 2.5
- 2.4 → 2.5
- 2.5 → 2.5
よくわかりませんが、法則があるのであれば、Excelでも計算ができますネ。
早速このワケのわからない「2捨3入7捨8入」にチャレンジしてみました。
小数点第一位より下の値は切り捨てる
まず、小数点第一位だけで判定するとのことなので、それにマッチした関数を探します。どうやらROUNDDOWNのようです。
ROUNDDOWNROUNDDOWN(1.99998,1)は「1.9」になりますね。
数をゼロに向かって特定の精度に切り下げます。
構文
ROUNDDOWN(数値; カウント)
カウント の小数位にゼロに向けて切り下げた 数値 を返します。カウントが省略されている場合やゼロの場合、関数は整数に切り下げられます。カウントが負の数の場合、関数は次の 10、100、1000 などに切り下げられます。
LibraOfficeヘルプ - Libra Calc
値は0.5ずつ増える
問題はこの次です。最終的な値の変動が0.5単位ということです。
つまり、小数点第一位の値は0か5ということになるので余剰(割り算の余りの計算)で出せそうですね。
MOD
ある整数を別の整数で割ったときの余りを返します。
構文
MOD(被除数;除数)
整数の引数では、この関数は Dividend modulo Divisor、つまり 被除数 を 除数 で割ったときの余りを返します。
この関数は Dividend - Divisor * INT(Dividend/Divisor) として実行されます。引数が整数でない場合、この数式は結果を返します。
LibraOfficeヘルプ - Libra Calc
A列の値を入れて、B列に「=MOD(A1,0.5)」と入れた結果は以下の通りです。(MODで小数点使って良いのか…という話もありますが)
うまく0.0~0.4で循環しています。
A列からB列を引くと、1.0・1.5・2.0・2.5になりました。
でも今回の要件は1.2の時は1.0、1.3の時は1.5、1.7の時は1.5、1.8の時は2.0になっていなければいけません。
表で見てみると、C列が2行ずつ上に上がればそんな感じになりますね。
A列は0.1が1行ということは、2行分動かすには0.2を足したり引いたりすればよいことになります。
なので、A列の値にあらかじめ0.2を足しておいて、余剰計算をさせればよいということになります。
2行分移動のイメージはこんな感じです。
A列が1.2の時は1.0、1.3の時は1.5。1.7の時は1.5、1.8の時は2.0となるイメージです。
セルに入れる計算式
一気に計算してしまうと、C列に入れる式は「=A1+0.2-MOD(A1+0.2,0.5)」ということになります。A列に小数点一位以下の値が入るのであれば「=ROUNDDOWN(A1,1)+0.2-MOD(ROUNDDOWN(A1,1)+0.2,0.5)」ということになります。
無事に小数点第一位の値から2捨3入7捨8入の数値を求めることができました。
いかがだったでしょうか。
実はもっと簡単な関数でできますが、自分なりに考えた考え方を書いてみました。
何か参考になれば嬉しいです。
それでは、よいExcelライフを。