給与から社会保険料を控除するときなど、金額の端数を「50銭以下は切り捨て、51銭以上は切り上げ」にしたいことがあります。いわゆる五捨六入です。
ExcelのROUND関数は四捨五入なので、端数がちょうど0.5のときだけ結果が逆になります。ROUNDUPとROUNDDOWNは、端数が何であっても一方向に動かします。五捨六入そのものを返す関数はありません。
この記事は、給与計算の処理でこの端数処理をExcelの式で書くのに困っている人向けです。式の書き方と、境界の値で何が返るかを実機で確かめた結果をまとめます。どの項目にどの端数処理を使うかは、法令や労使の取り決めで決まるものなので、扱いません。
先に結論
金額がB2にある場合、次の式です。
=MAX(0,ROUNDUP(B2-0.5,0))
0.5を引いてROUNDUPで切り上げ、0を下回ったら0にします。金額は0以上を前提にしています。
=IF(B2=0,0,ROUNDUP(B2-0.5,0))では足りません。0.5円より小さい金額で-1が返ります。
ROUND・ROUNDUP・ROUNDDOWNでは書けない
| 金額 | ROUND | ROUNDUP | ROUNDDOWN | 五捨六入(目標) |
|---|---|---|---|---|
| 10.49 | 10 | 11 | 10 | 10 |
| 10.5 | 11 | 11 | 10 | 10 |
| 10.51 | 11 | 11 | 10 | 11 |
| 1234.5 | 1235 | 1235 | 1234 | 1234 |
ROUNDは10.5を11にします。ちょうど0.5の金額だけが、目標とずれます。
0.5を引いてROUNDUPする仕組み
先に0.5を引いてから、ROUNDUPで整数に切り上げます。
- 10.51 → 10.01 → 11
- 10.5 → 10.00 → 10
- 10.49 → 9.99 → 10
ちょうど0.5の金額は、引くと整数になるので切り上がりません。0.5を超える金額だけが、次の整数に上がります。0.500001は1、0.499999は0、2.500001は3、2.499999は2になりました。ROUNDUP関数の書式は、MicrosoftサポートのROUNDUP 関数のページで確認できます。
なお、丸めを行う順序で結果が変わる例は、【Excel関数】時間の丸めは順序で結果が変わる理由と対処で扱っています。
0円ガードは「ちょうど0」では足りない
ROUNDUP(0-0.5,0)は-1になります。ROUNDUPは0から遠ざける方向に丸めるためです。そこでIF(金額=0,0,…)というガードを付けがちですが、守れるのはちょうど0だけです。
| 金額 | IF(金額=0,0,…) | MAX(0,…) | 目標 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0.3 | -1 | 0 | 0 |
| 0.49 | -1 | 0 | 0 |
| 0.499999 | -1 | 0 | 0 |
| 0.5 | 0 | 0 | 0 |
0.01から0.499999までの金額で-1が返りました。ガードの条件は「0」ではなく「0.5以下は0」です。MAX(0,…)なら、この条件を式の中に含められます。

計算結果が.5ちょうどにならないとき
時給と時間の掛け算では、正しい値が27.5でも、セルの値が27.500000000000004のように、わずかにずれることがあります。25×1.1がその例です。
そこで、8つの掛け算(25×1.1、1024.4×3.75、1025.4×7.5、45×1.1、1024.6×7.5、1027.6×3.75、0.1×5、3×0.5)で確かめました。正しい値が.5ちょうどになる組み合わせです。セルの値は、正しい値より上に最大9.1E-13、下に最大9.1E-13ずれていました。それでも、MAX(0,ROUNDUP(金額-0.5,0))は、8つとも目標どおりに返しました。Excelでは、セルの値と正しい値の比較がTRUEになり、引き算も0になりました。ROUND(金額,2)で先に丸める必要はありませんでした。この結果は今回の環境のものです。他のバージョンとMac版は未検証です。
空欄と文字列
金額が空欄なら、IF版・MAX版とも0を返します。文字列(abc)が入っているときと、空文字を返す数式のときは、どちらも#VALUE!になります。エラー値の見方は、【Excel関数】#N/A・#VALUE!・#REF!が出たら最初に確認で整理しています。
まとめ
- 五捨六入は、0.5を引いてROUNDUPで書けます
- 0.5以下の金額が-1にならないよう、
MAX(0,…)で守ります - 掛け算の結果が.5前後にずれても、今回の環境では結果は変わりませんでした
検証した環境は、Excel 16.0(Build 20527)・Windows 64bit・日本語版です。他のバージョンとMac版は未検証です。

コメント