【Excel】「0.1+0.2≠0.3」になる!Excelの浮動小数点誤差をROUNDで防ぐ方法

【Excel】「0.1+0.2≠0.3」になる!Excelの浮動小数点誤差をROUNDで防ぐ方法
🛡️ 超解決

Excelで「0.1 + 0.2」を計算すると、結果が「0.3」にならず「0.30000000000000004」と表示されることがあります。この現象は、Excelが数値を計算する際の仕組みに起因するものです。この予期せぬ結果は、特に財務計算などで正確性が求められる場面では問題となります。本記事では、このExcelの浮動小数点誤差の原因を解説し、ROUND関数を使った具体的な対策方法を説明します。

Excelの計算結果が想定と異なる場合、その原因を理解し、適切な対処法を適用することが重要です。この記事を読めば、Excelで発生する浮動小数点誤差のメカニズムを理解し、ROUND関数を用いて計算結果を正確に丸める方法を習得できます。これにより、より信頼性の高いデータ分析や財務計算が可能になります。

【要点】Excelの浮動小数点誤差を防ぐROUND関数の使い方

  • 浮動小数点誤差の理解: コンピューターが数値を内部で表現する際の仕組みによる計算誤差であることを理解する。
  • ROUND関数: 指定した桁数で数値を丸めるExcelの関数であることを理解する。
  • ROUND関数による誤差解消: 計算結果をROUND関数で丸めることで、意図した数値に合わせる手順を習得する。

ADVERTISEMENT

Excelで浮動小数点誤差が発生する仕組み

Excelで「0.1 + 0.2」が「0.3」にならないのは、コンピューターが数値を内部で処理する方式に理由があります。多くのコンピューターは、数値を2進数で表現・計算しますが、私たちが普段使う10進数の一部(例えば0.1や0.2)は、2進数では正確に表現できません。これは、10進数で1/10を表現するのが単純であるのに対し、2進数で1/10を表現しようとすると無限小数になるのと同じ原理です。

そのため、Excelはこれらの数値を近似値として内部に格納します。この近似値を使って計算を行うと、本来期待される結果とわずかに異なる値が生じることがあります。この誤差は、特に小数点以下の計算で顕著に現れます。この誤差は、Excelに限らず、多くのコンピュータープログラムで発生しうる「浮動小数点誤差」と呼ばれています。この誤差は、表示形式で小数点以下の桁数を調整しても、内部的な数値自体は変わらないため、見た目上は解消されません。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

ROUND関数を使った誤差の解消手順

Excelの浮動小数点誤差は、ROUND関数を使用することで効果的に解消できます。ROUND関数は、指定した桁数で数値を丸める機能を持つため、計算結果の微小な誤差を切り捨てたり切り上げたりして、意図した通りの数値に合わせることができます。ここでは、具体的なROUND関数の使い方を説明します。

  1. ROUND関数の構文を理解する
    ROUND関数の構文は「=ROUND(数値, 桁数)」です。ここで、「数値」には丸めたい値や数式を指定し、「桁数」には小数点以下の桁数や整数部分の桁数を指定します。
  2. 小数点以下を指定桁数で丸める
    例えば、セルA1に「0.1」、セルB1に「0.2」が入力されているとします。これらの合計を小数点以下第1位で丸めたい場合は、任意のセルに「=ROUND(A1+B1, 1)」と入力します。これにより、計算結果の「0.30000000000000004」が「0.3」として表示されます。
  3. 小数点以下を切り捨てる場合
    小数点以下を常に切り捨てたい場合は、ROUNDDOWN関数を使用します。例えば、「=ROUNDDOWN(A1+B1, 1)」と入力すると、「0.30000000000000004」は「0.3」になります。
  4. 小数点以下を切り上げる場合
    小数点以下を常に切り上げたい場合は、ROUNDUP関数を使用します。例えば、「=ROUNDUP(A1+B1, 1)」と入力すると、「0.30000000000000004」は「0.4」になります。
  5. 整数部分で丸める場合
    桁数に「0」を指定すると小数点以下第1位を四捨五入します。「=ROUND(A1+B1, 0)」と入力すると、「0.30000000000000004」は「0」になります。
  6. 負の桁数を指定して丸める場合
    桁数にマイナスの値を指定すると、小数点ではなく整数部分で丸められます。例えば、「桁数」に「-1」を指定すると、一の位を四捨五入します。「=ROUND(123.45, -1)」は「120」になります。「-2」を指定すると、十の位を四捨五入し「100」になります。

ROUND関数の注意点とよくある誤解

ROUND関数は浮動小数点誤差を解消するのに非常に有効ですが、いくつか注意すべき点と、よくある誤解があります。

ROUND関数でも「0.3」にならない場合

ROUND関数を使っても、期待通りの結果にならない場合があります。これは、丸める桁数の指定が誤っているか、あるいは誤差がROUND関数の丸め処理の範囲を超えている可能性があります。例えば、非常に複雑な計算や、非常に小さな数値を扱う場合に、誤差が予測以上に大きくなることがあります。このような場合は、丸めたい桁数をさらに小さくするか、ROUNDDOWNやROUNDUP関数を適切に使い分ける必要があります。また、計算の途中で誤差が生じている場合は、その原因となっている数式を見直すことも重要です。

ROUND関数と表示形式の違い

ROUND関数は、数値そのものを指定した桁数で丸めます。一方、セルの表示形式で小数点以下の桁数を調整するのは、あくまで見た目上の表示を変えるだけで、内部的な数値自体は丸められません。例えば、セルに「0.30000000000000004」と計算結果が表示されていても、表示形式を小数点以下第1位に設定すると「0.3」と表示されます。しかし、このセルを別の計算に使用すると、内部的な値である「0.30000000000000004」がそのまま使われるため、意図しない計算結果になる可能性があります。正確な計算を行うためには、ROUND関数で数値を丸めてから使用することが不可欠です。

ROUND関数で発生する「丸め誤差」

ROUND関数自体も、数値を丸める際に「丸め誤差」を生じさせることがあります。これは、四捨五入のルールが原因で発生する誤差です。例えば、ROUND関数で「0.5」を整数に丸める場合、結果は「1」になりますが、もし「-0.5」を整数に丸める場合は「0」になります。これは、Excelが「最近接偶数への丸め」という方式を採用しているためです(Excel 2007以降)。この挙動を理解しておかないと、予期せぬ結果になることがあります。常に期待通りの丸めが行われるとは限らないため、必要に応じてROUNDDOWNやROUNDUP関数を使い分けることが重要です。

ADVERTISEMENT

浮動小数点誤差を防ぐための他の方法

ROUND関数以外にも、浮動小数点誤差の影響を軽減または回避するための方法がいくつか存在します。

計算の順序を変更する

計算の順序を変えることで、浮動小数点誤差の発生を抑えられる場合があります。例えば、数値を加算してから乗算するよりも、先に乗算してから加算する方が、誤差が小さくなることがあります。これは、数式の構造によって誤差の蓄積の仕方が変わるためです。ただし、この方法は数式の意味合いが変わってしまう可能性もあるため、慎重に適用する必要があります。

数値の入力を正確に行う

そもそも、正確な数値をExcelに入力することが、浮動小数点誤差の発生を防ぐ第一歩です。例えば、0.1を表現するために「1/10」と数式で入力すると、Excelは内部で正確な分数として処理するため、浮動小数点誤差が生じにくくなります。また、手入力で「0.1」と入力するのではなく、可能であれば他のシステムから正確なデータをインポートする方が、誤差のリスクを低減できます。

表示形式を工夫する

前述の通り、表示形式の変更だけでは内部的な誤差は解消されませんが、視覚的に分かりやすくするために有効です。例えば、小数点以下3桁まで表示したい場合、表示形式を「#,##0.000」と設定することで、計算結果が「0.30000000000000004」であっても「0.300」と表示され、見やすくなります。ただし、これはあくまで表示上の調整であり、計算の正確性を保証するものではない点に注意が必要です。

XLOOKUP関数とROUND関数の組み合わせ

XLOOKUP関数は、Excelの新しい検索関数であり、VLOOKUP関数やHLOOKUP関数の後継として注目されています。XLOOKUP関数とROUND関数を組み合わせることで、検索結果の数値を正確に扱うことができます。例えば、ある表から数値を検索し、その数値を小数点以下第2位で四捨五入して表示したい場合、以下のような数式が考えられます。

例えば、検索対象のデータがA1:B10の範囲にあり、検索値がC1セルに入力されているとします。検索値に対応するD列の数値を検索し、小数点以下第2位で丸めたい場合は、以下の数式を使用します。

=ROUND(XLOOKUP(C1, A1:A10, D1:D10), 2)

この数式では、まずXLOOKUP関数でC1セルの値に対応するD列の数値を検索します。その検索結果(内部的には浮動小数点誤差を含む可能性がある値)をROUND関数に渡し、小数点以下第2位で丸められた値が最終的な結果として表示されます。これにより、検索結果の数値も浮動小数点誤差の影響を受けずに、意図した精度で表示・利用できるようになります。

まとめ

Excelで「0.1 + 0.2」が「0.3」にならない問題は、コンピューターの数値計算における浮動小数点誤差が原因で発生します。この誤差は、表示形式を変更するだけでは解消されず、後続の計算に影響を与える可能性があります。本記事では、ROUND関数を用いることで、この浮動小数点誤差を効果的に解消し、計算結果を意図した精度に丸める方法を解説しました。ROUND関数を適切に活用することで、Excelでのデータ分析や財務計算の信頼性を高めることができます。今後は、数値を扱う際には常に浮動小数点誤差の可能性を考慮し、ROUND関数などの丸め関数を積極的に利用していくことをお勧めします。また、XLOOKUP関数のような他の関数と組み合わせることで、より精度の高いデータ処理が可能になります。

📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】