TRUNC関数は数値の指定桁より後を丸めずに切り捨てる関数です。構文は TRUNC(数値,[桁数]) で、桁数を省略すると小数部分を取り除きます。最初に、正数だけでなく負数でも期待する方向を確認してください。=TRUNC(-8.9) は-8で、INT(-8.9)の-9とは異なります。「小さい数へ丸める」のではなく、0に近づく方向へ不要桁を除くのがTRUNCです。
TRUNCの基本構文と結果
第1引数は切り捨てる数値、第2引数num_digitsは残す桁の位置です。正の桁数は小数点以下、0は整数、負の桁数は十・百・千の位を指定します。第2引数を省略した既定値は0です。セルA2に1234.567がある場合、次の結果になります。
=TRUNC(A2) → 1234
=TRUNC(A2,2) → 1234.56
=TRUNC(A2,1) → 1234.5
=TRUNC(A2,-1) → 1230
=TRUNC(A2,-2) → 1200
TRUNCは元セルを変更せず結果を返します。表示上の小数点以下を減らすだけなら、ホームタブの小数点以下の表示桁数を使いますが、内部値は残ります。後続計算にも切り捨て値を使う必要があるときだけTRUNCを式へ組み込みます。表示と計算値を混同すると、画面の合計と明細の合計が合わない原因になります。
負数でINTと違う理由
TRUNCは小数部分を除去するため、正負どちらでも0に近づきます。INTは「その数以下で最も近い整数」へ切り下げるため、負数では0から遠ざかります。温度、損失、差額、座標など負値を含むデータでは結果が変わります。業務要件が「小数部分を捨てる」ならTRUNC、「常に下側の区間へ分類する」ならINTが適します。
=TRUNC(4.7) → 4
=INT(4.7) → 4
=TRUNC(-4.7) → -4
=INT(-4.7) → -5
たとえば1時間単位の区間番号を作るとき、-0.2時間を-1の区間へ入れたいならINT、符号付き値の整数部分だけ欲しいならTRUNCです。関数名の印象で選ばず、-1.1、-0.1、0、0.1、1.1のテスト表を作って期待値と比較します。
ROUND、ROUNDDOWNとの違い
ROUNDは四捨五入し、ROUNDDOWNは指定桁へ0方向に丸めます。TRUNCとROUNDDOWNは多くの数値で同じ結果になりますが、意図の表現が違います。単純に余分な桁を除くならTRUNC、丸め規則の一種として下方向を明記するならROUNDDOWNが読みやすい場合があります。ROUNDUPは0から遠ざかる方向です。
=TRUNC(12.987,2) → 12.98
=ROUNDDOWN(12.987,2) → 12.98
=ROUND(12.987,2) → 12.99
=ROUNDUP(12.981,2) → 12.99
負数でもROUNDDOWNは0方向なので、=ROUNDDOWN(-12.987,2) は-12.98です。「値を小さくする」という日常語とは一致しない場合があります。税額、単価、利息は法令や社内規程で端数処理が決まるため、TRUNCを選ぶ前に切り捨て単位と処理段階を確認します。
金額と税計算へ使う例
単価がB2、数量がC2、税率がF1にあるとします。明細ごとに税を切り捨てるのか、請求書合計へ税率を掛けて最後に切り捨てるのかで結果が変わります。次の2式は同じにならないことがあります。業務仕様に合う一方だけを使い、請求書に端数処理規則を明記します。
明細税: =TRUNC(B2*C2*$F$1,0)
合計税: =TRUNC(SUMPRODUCT(B2:B20,C2:C20)*$F$1,0)
Excelの浮動小数点計算では、見た目が12.3でも内部値に微小差がある場合があります。端数処理が重要なら、規程で必要な位置にROUNDまたはTRUNCを明示します。ただし「表示桁数で計算する」設定はブック全体の保存値を不可逆的に変える可能性があり、累積誤差を生むため、問題回避のために安易に有効化しません。
時刻から時・分を取り出す
Excelの日時は、整数部が日付、小数部が時刻です。A2が日時なら=TRUNC(A2)で日付部分を得られます。時刻だけは=A2-TRUNC(A2)または=MOD(A2,1)です。結果セルの表示形式を日付または時刻に設定します。経過時間が24時間を超える値では、日付と時刻の意味を混同しないよう[h]:mm形式も検討します。
日付だけ: =TRUNC(A2)
時刻だけ: =A2-TRUNC(A2)
経過した完全な時間: =TRUNC(A2*24)
A2が午前9時のような時刻だけならTRUNC(A2)は0です。これはエラーではなく、1日未満だからです。時刻を「9」という時間数へ変えるなら=A2*24、完全な時間だけなら=TRUNC(A2*24)とします。負の日時や1900年以前の日時はExcelの表示制約が関わるため、単なるTRUNCの問題として扱いません。
桁数をセルで指定する
桁数を設定セルF1で管理するなら=TRUNC(A2,$F$1)とします。F1が2なら小数第2位まで、-2なら100の位まで残します。利用者が誤って大きな値や文字を入れないよう、F1へ整数の入力規則を設定し、単位をラベルに明記します。桁数に小数を入れると整数部分へ切り捨てられるため、2.9を2として受け入れる設計がよいか確認します。

データ整理での応用
連続値を一定幅のグループへまとめる場合、正数だけなら=TRUNC(A2/100)*100で100単位の下端を作れます。しかし負数を含むと0方向に寄るため、-150が-100へ分類されます。数直線上で-200~-101の区間へ入れたいならINTを使う方が適切です。境界値の-200、-100、0、100、200を必ずテストします。
正数中心の100単位切り捨て: =TRUNC(A2/100)*100
負数を含む下側区間: =INT(A2/100)*100
文字列として取り込んだ数値では#VALUE!になることがあります。ISNUMBERで型を確認し、カンマや単位記号が混じる場合は原列を保持したまま変換列でVALUE、NUMBERVALUE、SUBSTITUTEなどを使います。空白を0として処理してよいかも仕様で決めます。エラーをIFERRORで0へ置換すると、欠損と実際の0を区別できません。
検算とよくある失敗
- 表示桁数を減らしただけで内部値も切り捨てられたと思う
- 負数でTRUNCとINTを同じだと思う
- 明細ごとの端数処理と合計後の端数処理を混在させる
- 単位が円・千円・時間なのに桁数の意味を記載しない
- 元データを値貼り付けで置換し、切り捨て前の値を失う
適用前に、正数、負数、0、境界直前、境界ちょうど、非常に小さい小数を含むテスト表を作ります。期待値列とTRUNC結果を比較し、差分が0であることを確認します。集計では、切り捨て前合計、明細切り捨て後合計、合計後切り捨てを並べ、どの値を正式採用するか所有者に確認します。
式を確定したら、元列、計算式、桁数設定、端数処理の根拠を残します。値だけを他システムへ渡す場合も、再計算できる原本を保存します。TRUNCは簡単な関数ですが、負数、単位、処理段階を明示することで、数字が合わない問題を防げます。
大きな値と精度に関する注意
Excelが保持できる有効桁数には限りがあるため、非常に長い識別番号を数値として読み込むと、TRUNC以前に末尾が変わることがあります。会員番号、JANコード、口座に類する値は計算対象ではないので文字列として取り込みます。また、=TRUNC(0.29*100,0)のような式は内部表現の微小差で期待と異なる可能性があります。通貨など規則が厳密な処理では、入力の単位を整数最小単位へ揃えるか、必要な段階でROUNDを併用し、既知の期待値でテストします。
TRUNCの結果を再びTRUNCしても通常は変わりませんが、途中計算のどこで適用するかは結果へ影響します。計算途中の各段階へ無計画に入れると誤差が累積します。要件で定めた一つの段階に限定し、数式コメントや仕様書へ「小数第何位未満を、どの単位で切り捨てるか」を残します。

コメント