Accessで四捨五入する方法をお探しですね。
広告
Accessで四捨五入・切り捨て・切り上げをする方法【Round・Int・Fix関数の使い分け】
Accessで金額や数量、割合を計算していると、「小数点以下を四捨五入したい」「消費税を切り捨てたい」「在庫数を切り上げたい」といった端数処理が必要になってきます。
ところが、AccessのRound関数はExcelのROUND関数と同じ感覚で使うと、思った結果にならないことがあるんです。
また、Int関数とFix関数はどちらも切り捨てに見えますが、マイナスの数では結果が変わってしまいます。
この記事では、Accessで四捨五入・切り捨て・切り上げを行う方法と、Round・Int・Fix関数の違いを、実務で迷わないようにわかりやすく解説していきます。
Accessで端数処理をするときの基本的な考え方
Accessで数値を扱うとき、まず考えたいのは「表示上の小数点を減らしたいだけなのか」「計算結果そのものを丸めたいのか」という違いです。
たとえば、フォームやレポートで小数点以下を表示しないだけでいいなら、書式設定で見た目を整えれば済む場合があります。
でも、請求金額や集計値として保存・出力する数値を丸めたい場合は、クエリやVBAで関数を使って実際の値を加工する必要があります。
この違いを混同すると、画面では整数に見えるのに内部では小数が残っていて、合計金額が合わない…なんてトラブルにつながってしまいます。
Accessでよく使う端数処理には、**四捨五入**、**切り捨て**、**切り上げ**の3種類があります。
四捨五入は決まった桁で近い値に丸める処理、切り捨ては指定した桁より下を落とす処理、切り上げは端数があれば上の値に進める処理です。
ただし、AccessにはExcelのROUNDUP関数やROUNDDOWN関数のようなわかりやすい専用関数が最初から揃っているわけではありません。
そのため、Round関数、Int関数、Fix関数、場合によってはSgn関数やIIf関数を組み合わせて、目的の丸め方を作っていきます。
クエリで使う場合は、演算フィールドに式を入力します。
たとえば「単価」と「数量」から金額を計算して丸めるなら、クエリのフィールド欄に `丸め後金額: Round([単価]*[数量],0)` のように書きます。
フォームやレポートのテキストボックスで使う場合は、コントロールソースに `=Round([単価]*[数量],0)` のように入力します。
VBAでは `Round(値, 桁数)` の形で記述できるので、同じ関数でも使う場所によって先頭の「=」やフィールド名の書き方が少し変わる点に注意してください。
端数処理で特に気をつけたいのは、**金額計算とマイナスの数**です。
金額では1円未満をどう扱うかが業務ルールに直結しますし、返品や値引きなどでマイナス値が出る場合は、Int関数とFix関数の違いが結果に影響してきます。
また、数値型に「倍精度浮動小数点型」を使っていると、二進数で小数を扱う都合で、見た目には同じ数値でも内部的にわずかな誤差を含むことがあります。
消費税や請求額など正確性が必要な処理では、通貨型を使う、丸めるタイミングを統一する、集計前と集計後のどちらで端数処理するかを明確にする、といった設計も大切です。
Round関数で四捨五入する方法と注意点
AccessのRound関数は、指定した桁数で数値を丸める関数です。
基本の書き方は `Round(数値, 小数点以下桁数)` で、2つ目の引数には残したい小数点以下の桁数を指定します。
たとえば `Round(123.456, 2)` は小数第2位まで残して `123.46`、`Round(123.456, 0)` は整数に丸めて `123` になります。
クエリで税込金額を整数に丸めるなら、`税込金額: Round([税抜金額]*1.1, 0)` のように書けます。
ただし、AccessのRound関数は一般的にイメージされる「5以上なら必ず切り上げる四捨五入」とは完全には同じではありません。
AccessのRound関数は、いわゆる**「銀行丸め」**または**「JIS丸め」**と呼ばれる処理を行い、ちょうど真ん中の値では偶数側に丸めます。
たとえば `Round(2.5, 0)` は `3` ではなく `2`、`Round(3.5, 0)` は `4` になります。
これは大量のデータを丸めたときに、常に上方向へ偏るのを避けるための考え方なんですが、ExcelのROUND関数に慣れている人ほど混乱しやすいポイントです。
一般的な四捨五入、つまり「4以下を切り捨て、5以上を切り上げ」という処理をしたい場合は、Round関数だけに頼らず、Int関数やFix関数を使って式を作る方法があります。
正の数だけを整数に四捨五入するなら、`Int([数値]+0.5)` がわかりやすい式です。
小数第1位まで残したい場合は、いったん10倍してから丸め、最後に10で割るので、`Int([数値]*10+0.5)/10` のようにします。
小数第2位なら100倍して `Int([数値]*100+0.5)/100` と考えると、桁数を変える仕組みが理解しやすくなります。
一方、マイナスの数も含めて「0から遠ざかる方向に5以上を丸める」一般的な感覚の四捨五入にしたい場合は、`Fix([数値]+0.5*Sgn([数値]))` のような考え方を使います。
Sgn関数は、数値が正なら `1`、0なら `0`、負なら `-1` を返す関数です。
つまり正の数では0.5を足し、負の数では0.5を引いてから、Fix関数で小数部分を落とします。
たとえば `-1.5` を `-2` にしたい場合、単純な `Int([数値]+0.5)` では意図と違う結果になることがあるので、マイナスの数をどう扱う業務ルールなのかを先に決めておく必要があります。
Round関数が向いているのは、銀行丸めで問題ない統計処理や平均値の表示、Access標準の丸め方で統一したい場面です。
一方、請求書や消費税計算などで「0.5円以上は必ず1円に上げる」といった明確なルールがある場合は、Round関数の仕様を確認したうえで、必要に応じて独自の式を使うほうが安全です。
特に金額処理では、丸めの方法が1円単位の差として表れるので、Accessの関数名だけで判断せず、実際に `2.5`、`3.5`、`-1.5` などのテスト値で結果を確認してから実装することをおすすめします。
Int関数とFix関数の違い:切り捨てで迷いやすいマイナスの数
Int関数とFix関数は、どちらも小数点以下を取り除いて整数部分を返す関数です。
書き方はシンプルで、`Int(数値)`、`Fix(数値)` のように使います。
正の数だけを扱う場合、たとえば `Int(7.9)` も `Fix(7.9)` も結果は `7` になります。
そのため、売上数量や単価など常に0以上の値しか出ない処理では、両者の違いを意識しないまま使っても結果が同じになることが多いです。
違いが出るのは、**対象の数値がマイナスの数のとき**です。
Int関数は、数値を「より小さい方向」に丸めます。
そのため `Int(-2.8)` は `-3` になります。
一方、Fix関数は小数部分を単純に取り除き、0に近い方向へ丸めるので、`Fix(-2.8)` は `-2` になります。
この違いは、返品金額、値引き、差額、在庫調整など、マイナス値を扱うAccessデータベースでは非常に重要です。
代表的な結果を整理すると、次のようになります。
| 元の値 | Int関数の結果 | Fix関数の結果 |
|—:|—:|——:|
| 7.9 | 7 | 7 |
| 2.4 | 2 | 2 |
| 0.8 | 0 | 0 |
| -0.8 | -1 | 0 |
| -2.5 | -3 | -2 |
| -4.3 | -5 | -4 |
Int関数は数学でいう「床関数」に近い動きをします。
床関数とは、数直線上で必ず下側、つまりより小さい値へ落とす処理です。
正の数なら小数点以下を落とすだけに見えますが、マイナスの数では `-2.1` より小さい整数が `-3` になるので、見た目の「小数だけ削る」感覚とはズレます。
数学的に範囲分けをしたい場合や、マイナスの値も含めて常に下方向へそろえたい場合にはInt関数が適しています。
Fix関数は、見た目どおりに小数部分を削除する処理だと考えるとわかりやすいです。
`-2.8` の小数部分「.8」を取り除いて `-2` にするので、0に近づく方向へ丸められます。
実務では「端数をなかったことにする」「小数点以下を単純にカットする」という意味で切り捨てたいことが多いので、マイナスの数を含む可能性があるならFix関数のほうが意図に合うケースがあります。
ただし、税計算や数量計算で「必ず下方向へ丸める」と定義されている場合は、Int関数を選ぶべきです。
小数第1位や第2位で切り捨てたい場合は、倍率をかけてからIntまたはFixを使い、最後に元の桁へ戻します。
たとえば正の数を小数第2位まで残して切り捨てるなら、`Int([数値]*100)/100` です。
マイナスの数も含めて小数第2位より下を単純にカットしたいなら、`Fix([数値]*100)/100` のほうが自然です。
「切り捨て」という言葉だけではIntとFixのどちらが正しいか決まらないので、マイナス値が出る可能性と、0方向なのか下方向なのかを確認して選ぶことが大切です。
Accessで切り上げを行う式と実務での使い分け
Accessには、ExcelのROUNDUP関数に相当するようなわかりやすい切り上げ専用関数が標準で用意されていません。
そのため、切り上げをしたい場合はInt関数を応用して式を作るのが一般的です。
正の数を整数に切り上げるだけなら、`Int([数値]+0.999999)` のような式を見かけることもありますが、これは桁数や小数誤差の影響を受けやすいので、実務ではあまりおすすめできません。
より考え方が明確なのは、数学的な切り上げとして **`-Int(-[数値])`** を使う方法です。
`-Int(-[数値])` は、いったん数値の符号を反転し、Int関数で下方向へ丸めたあと、もう一度符号を戻す式です。
たとえば `[数値]` が `2.1` の場合、まず `-2.1` にし、`Int(-2.1)` で `-3`、最後に符号を戻して `3` になります。
整数に切り上げるなら、クエリでは `切上結果: -Int(-[数値])` と書けます。
小数第1位まで残して切り上げる場合は、`-Int(-[数値]*10)/10`、小数第2位までなら `-Int(-[数値]*100)/100` のように、切り捨てと同じく倍率を使って桁を調整します。
ただし、切り上げもマイナスの数の扱いによって意味が変わります。
数学的な切り上げは「より大きい方向へ丸める」処理なので、`-2.8` を切り上げると `-2` になります。
一方、業務上の「切り上げ」が「絶対値を大きくする」「端数があれば請求額を増やす」という意味で使われている場合、マイナスの値に対して同じ式を使うと意図と違う可能性があります。
返品やマイナス請求があるシステムでは、正の数とマイナスの数を同じ式で処理してよいか、事前に業務ルールを確認してください。
実務で迷わないためには、処理名ではなく**「どちらの方向に丸めるか」**で関数を選ぶのが確実です。
代表的な使い分けは次のように考えると整理しやすくなります。
| やりたい処理 | 正の数だけなら | マイナスの数も含む場合の注意 |
|—|—|—|
| Access標準の丸め | `Round([数値], 桁数)` | 0.5が偶数側に丸められる |
| 一般的な四捨五入 | `Int([数値]*倍率+0.5)/倍率` | `Sgn` と `Fix` の利用を検討 |
| 単純な切り捨て | `Int([数値]*倍率)/倍率` | 0方向なら `Fix`、下方向なら `Int` |
| 数学的な切り上げ | `-Int(-[数値]*倍率)/倍率` | マイナスの数では0に近づく結果になる |
たとえば消費税の1円未満を切り捨てる場合、税額が常に正の数であれば `Int([税抜金額]*0.1)` のような式で十分なことが多いです。
一方、返品伝票で税額がマイナスになる可能性があるなら、`Int` ではなく `Fix` を使うべきか、そもそも返品時の端数処理を別ルールにするべきかを検討する必要があります。
また、梱包数や箱数を「少しでも端数があれば1箱追加」としたい場合は、`-Int(-[必要数]/[入数])` のような切り上げ式が役立ちます。
このように、関数そのものよりも、**業務上どの結果が正しいのかを先に決めること**が安定したAccess設計につながります。
Accessで端数処理を実装するときは、クエリ、フォーム、レポート、VBAのどこで丸めるかも重要です。
入力直後に丸めて保存すると後続処理は安定しますが、元の小数値を失うので再計算や検証がしにくくなります。
逆に最後のレポート出力だけで丸めると元データは保てますが、明細ごとの丸め合計と総額の丸め結果が一致しないことがあります。
請求書や集計表では「明細ごとに丸めるのか、合計後に丸めるのか」を統一し、テストデータで差額が出ないか確認しておくと安心です。
まとめ:Round・Int・Fixを使い分けて正確な端数処理を
Round・Int・Fix関数はどれも短い式で使える便利な関数ですが、Accessでは丸め方の仕様を理解して使い分けることが欠かせません。
– **Round関数**:Access標準の銀行丸め(0.5は偶数側)
– **Int関数**:より小さい方向への切り捨て
– **Fix関数**:0方向への小数カット
– **切り上げ**:`-Int(-数値)` の応用
このように覚えておくと、端数処理の判断がしやすくなります。
特に金額、税額、返品、在庫のように結果が業務に直結するデータでは、サンプル値を使って期待どおりの結果になるかを必ず確認してください。
関連して、日付計算、Null対策、Format関数による表示形式の設定も組み合わせて理解しておくと、Accessのクエリや帳票をより正確に作成できます。
広告
