【Access】Accessで四捨五入、切り捨て、切り上げを行う方法

今回はAccessにおいて、四捨五入、切り捨て、切り上げを行う方法をご紹介します。

Accessにおける、四捨五入、切り捨て、切り上げはExcelに比べると少し厄介です。

はじめに

以前に、Excelにおいて、四捨五入、切り捨て、切り上げを行う関数(ROUND関数、ROUNDUP関数、ROUNDDOWN関数)を紹介しました。

明けましておめでとうございます。今年もよろしくお願いします。 さて、新年初となる内容はExcelの関数についての記事パート3です。今回は、四捨五入、切り上...

Accessでも、上記の関数が使えるような気がしますが、実は使えません。(ROUND関数のみ存在しますが、実は、ExcelとAccessでROUND関数の挙動に違いがあります。)

そこで、今回はAccessにおいて、四捨五入、切り捨て、切り上げを行う方法をご紹介したいと思います。

切り捨て

Accessでは、ExcelにあるROUNDDOWN関数が存在しません。しかし、INT関数という小数点部分を切り捨てる関数が存在するのでこの関数で切り捨てを行います。

Int関数

Int関数は数値の整数部分を返す関数です。

Int(number)

引数のnumberには、Dobule型(倍精度浮動小数点型)または数式を入力します。

それでは、Accessにおいて、切り捨てを行う場合の例を見てみましょう。

小数点以下を切り捨て

Int(123.456)

小数点第2位以下を切り捨て

Int(123.456*10)/10

1の位以下を切り捨て

Int(123.456/10)*10

上記のような感じで使用します。

ExcelのROUNDDOWN関数ように、第2引数で○の位以下、小数点第○位を切り捨てのような指定ができないため、例のように元の数値の小数点を移動させて、Int関数を使い、小数点以下を切り捨てした後、再度、小数点を移動させることによって第2引数で○の位以下、小数点第○位を切り捨てのような場合に対応します。

四捨五入

AccessにおけるROUND関数は、四捨五入の関数ではありません。どういうことかというと、一つ例を挙げてみましょう。AccessでROUND関数を使ってみます。図1をご覧ください。

図1:AccessにおけるROUND関数

AccessでROUND関数を使用した結果です。

ExcelのROUND関数は四捨五入の関数でしたが、Accessでは四捨五入できていません。実は、Accessでは、偶数への丸めという端数処理を行う関数になります。

偶数への丸め(偶数丸め)は図1のように、通常の四捨五入とほぼ同じですが、端数がちょうど0.5のときに、切り捨てと切り上げのうち、偶数になる方で丸める端数処理です。

ですので、例えば、2.5に対して、AccessのROUND関数を使用した場合、偶数丸めを行っているため、通常の四捨五入の3という結果ではなく、2という結果になっています。図1において赤枠で囲んでいるところが通常の四捨五入と違うところです。

では、どのようにAccessにおいて、四捨五入を行えばいいでしょうか。

Accessにおいて、四捨五入をするには、0.5を足してから、切り捨てを行うと、四捨五入ができます。実際に例を見てみましょう。

小数点第1位を四捨五入

Int(123.456+0.5)

小数点第2位を四捨五入

Int(123.456*10+0.5)/10

1の位を四捨五入

Int(123.456/10+0.5)*10

上記のような感じです。小数第2位や1の位に対しては、小数点を移動して、0.5を足し、Int関数で切り捨て、小数点を戻すといった流れになります。基本的な考え方は切り捨てのときと同じです。

切り上げ

最後に、切り上げを見ていきましょう。

Accessでは、ExcelにあるROUNDUP関数が存在しません。Accessにおいて、切り上げを行うためには、元の数値に1を足し、Int関数を使用して、小数点以下を取り除きます。

例えば、123.456の小数第1位を切り上げたい場合、1を足して、124.456とします。あとは、Int関数を使用して、小数点以下を切り捨てることで、124とったように、切り上げをします。ただし、123.000のように元の数が整数の場合、1を足すことで、124になってしまうため、元の数が整数の場合は、1を加算しないようにする必要があります。そこで、条件分岐を用いて、元の数値が整数のとき、整数でないときに分けます。AccessではIf関数がないためIIf関数を使います。

IIf関数

IIf ( expr , truepart , falsepart )

IIf関数はIf関数と全く同じように考えても大丈夫です。exprに評価する式、truepartはexprが真のときに、falsepartはexprが偽のときに実行されます。

小数第1位を切り上げ

IIf(123.456=int(123.456),int(123.456),int(123.456+1))

小数第2位を切り上げ

IIf(123.456*10=int(123.456*10),int(123.456*10)/10,int(123.456*10+1)/10)

1の位を切り上げ

IIf(123.456/10=int(123.456/10),int(123.456/10)*10,int(123.456/10+1)*10)
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. 通りすがり より:

    まず少数と小数と混じっていますが、小数が正しいです。
    そして切り上げの時にIIFはいりません。
    1ではなく、0.9を足すのです。
    さらにこの式はマイナスを考慮していません。
    以上から RoundUpは
    Int(Abs([Experience])+0.9)*Sgn([Experience])
    これはクエリにおける式の例です。
    仮に計算するフィールドの名前を Experience としています。
    このほか、
    Round Int(Abs([Experience])+0.5)*Sgn([Experience])
    RoundDown
    Int(Abs([Experience]))*Sgn([Experience])
    です。

  2. tom より:

    誤字がありまして申し訳ございません。
    コメントありがとうございました。