スプレッドシートのABS関数で絶対値|差額・乖離率・在庫過不足をマイナス符号なしで集計する

スポンサーリンク

予算と実績を比べたあとに =B2-C2 で差額を出したら、列の中にプラスとマイナスが混在してしまった経験はありませんか?知りたいのは「どれだけズレているか」だけなのに、符号が混ざると並べ替えも合計もしづらいですよね。

そんなときに使うのが、スプレッドシートのABS関数です。引数はひとつだけ。マイナスの符号を取り除いて絶対値を返してくれるので、差の大きさだけを純粋に取り出せます。

この記事ではスプレッドシートのABS関数の基本構文から、実務でそのまま使える6パターンを早見表と数式サンプル付きで紹介します。予算実績差・乖離率・在庫の過不足・気温差・SIGN関数との組み合わせ・ARRAYFORMULAによる列一括処理まで、ひととおりカバーしますよ。エラー対処やExcel版のABS関数との違いも整理します。

スプレッドシートのABS関数とは?絶対値を返す基本

スプレッドシートのABS関数(読み方: アブソリュート関数)は、数値の絶対値を返す関数です。名前は英語の「absolute value(絶対値)」の頭文字がそのまま由来になっています。

引数に数値を1つ渡すと、次のように動きます。

  • 負の数(例: -5)→ 符号を取り除いて 5
  • 正の数(例: 5)→ そのまま 5
  • ゼロ(0)→ そのまま 0

絶対値とは「0からの距離」のことです。数直線でいえば、「-5」も「5」も0からの距離は同じ「5」ですよね。プラス・マイナスの方向ではなく、距離(大きさ)だけを取り出す関数だとイメージするとわかりやすいです。

ABS関数で何ができる?

ABS関数が活躍するのは、おもに次のような場面です。

  • 予算と実績の差額を「ズレの大きさ」として集計したいとき
  • 目標値からの乖離率を「方向に関係なく」比較したいとき
  • 在庫の過不足を「ズレ量」として統一的に把握したいとき
  • 2地点の気温差や測定値の誤差を符号なしで求めたいとき
  • SIGN関数と組み合わせて「大きさだけ加工し、符号は元のまま」処理したいとき
  • SUMPRODUCT関数で「絶対値の合計(誤差の総量)」を求めたいとき

NOTE: ABS関数はGoogleスプレッドシートの全バージョンで使えます。ExcelのABS関数とも完全に互換性があるので、ファイルをやり取りしても計算結果がずれる心配はありません。Excel版の詳しい解説はExcelのABS関数の使い方もあわせてご覧ください。

ABS関数の構文と引数

基本構文

=ABS(値)

カッコの中に「絶対値を求めたい数値」を1つ入れるだけです。引数は1つだけなのでとてもシンプルですね。

引数の説明

引数必須/任意説明
必須絶対値を求めたい数値、セル参照、または数式

戻り値は必ず 0以上の数値 になります。マイナスの値が返ることはありません。

戻り値の早見表

引数戻り値説明
正の整数(例: 100)100そのまま返る
正の小数(例: 0.5)0.5そのまま返る
負の整数(例: -100)100マイナス符号が外れる
負の小数(例: -0.5)0.5マイナス符号が外れる
ゼロ(0)0そのまま返る
空白セル0空白は数値の0として扱われる
文字列(例: “abc”)#VALUE!エラーになる
数値文字列(例: “-5″)5数値に変換できればOK

「結果は必ず0以上」というのが基本ルールです。

ABS関数の基本的な使い方

数値を直接渡す

リテラル(数値そのもの)を渡すパターンです。動作確認や入門用に使います。

=ABS(-10)    → 10
=ABS(10)     → 10
=ABS(0)      → 0
=ABS(-3.14)  → 3.14
=ABS(0.001)  → 0.001

負の数はマイナスの符号が消え、正の数とゼロはそのまま返ります。

セル参照を使う

実務ではセル参照を使うケースがほとんどです。A2セルに数値が入っているとします。

=ABS(A2)

A2が「-25」なら結果は「25」、A2が「100」なら結果は「100」になります。セル参照にしておけば、値が変わっても自動で絶対値が更新されます。一覧表で下にフィルダウン(コピー)すれば、列全体に対して絶対値を求められますよ。

数式の結果に対して使う

引数には数式を直接書くこともできます。実務でいちばんよく使うのが、引き算の結果にABS関数を適用するパターンです。

=ABS(B2-C2)

B2が「80」、C2が「100」なら、B2-C2 は「-20」になります。ABS関数で「20」が返ります。B2とC2が逆だった場合(B2=100、C2=80)でも、結果はやはり「20」です。どちらの方向の差でも、ズレの大きさだけが残ります。

基本パターンの早見表

数式結果(例)用途
=ABS(-15)15リテラル
=ABS(A2)A2の絶対値セル参照
=ABS(B2-C2)2セルの差の絶対値差額計算
=ABS(SUM(A2:A10))合計の絶対値集計後の符号除去
=ABS(C2-B2)/B2乖離率(小数)比率計算

実務でのABS関数活用パターン6選

ここからは、実務でよく使うABS関数の活用パターンを紹介します。差額・乖離率・在庫管理など、符号を意識せずに「ズレの大きさ」だけ取り出したい場面で活躍しますよ。

パターン1: 予算と実績の差額を求める

もっとも使用頻度が高い使い方です。B列に予算、C列に実績、D列に差額を出すケースを考えます。

=ABS(B2-C2)

!_images/spreadsheet-abs-function/02_formula_abs-budget.png

予算100万円、実績85万円なら B2-C2 は「-150,000」ですが、ABS関数で「150,000」になります。実績115万円でも結果は「150,000」です。どちらの方向にズレていても、差の大きさだけが残ります。

03 result budget diff

差額の絶対値を別列に出しておけば、降順に並べ替えるだけで「乖離の大きい項目」がすぐに浮かび上がります。月次レビューで重点的に見るべき科目を機械的にピックアップできて便利ですよ。

TIP: 差額の合計を「総ズレ量」として把握したいときはSUM関数と組み合わせます。D列にABS関数の結果を入れておけば、=SUM(D2:D10) でプラスとマイナスが相殺されずに済みます。純粋なズレの総量だけを集計できますよ。

パターン2: 目標からの乖離率を求める

部門ごとの売上目標と実績を比較するケースです。「目標を100%とした場合に、どれくらい離れているか」を方向に関係なく比較できます。

=ABS(C2-B2)/B2

B2が目標、C2が実績です。表示形式を「パーセント」にすれば、そのまま乖離率として読めます。

目標100万円に対して実績90万円なら乖離率は 10%、実績110万円でも 10% です。プラス方向の達成超過もマイナス方向の未達も、同じ尺度で並べて比較できますよ。

NOTE: 目標を上回ったか下回ったかを別列で残したいときは、SIGN関数を併用します。=SIGN(C2-B2) を別セルに置けば、達成(1)/未達(-1)/同値(0)が判定できるので、「方向」と「ズレ幅」を分けて管理できます。

パターン3: 在庫の過不足を統一的に把握する

適正在庫と実在庫の差をABS関数で求めるパターンです。B列に適正在庫、C列に実在庫が入っているとします。

=ABS(B2-C2)

適正100個に対して実在庫80個なら「20個の不足」、実在庫120個なら「20個の過剰」。どちらも結果は 20 です。「ズレ量」として並べると、適正からの乖離が大きい商品を優先的に見つけられます。

過不足の方向は別列で持ち、ABS関数の列はズレ幅専用にするのがコツです。

=IF(C2>B2, "過剰", IF(C2<B2, "不足", "適正"))

方向(ラベル)とズレ幅(数値)を分けて持っておくと、フィルタや並べ替えがしやすくなります。さらに =IF(C2-B2>0, "過剰", IF(C2-B2<0, "不足", "適正")) のように IF関数で書いてもOKですし、SIGN関数を使って =CHOOSE(SIGN(C2-B2)+2, "不足", "適正", "過剰") とまとめることもできます。

パターン4: 気温差・測定値の誤差を求める

2地点の気温の差や、設計値と実測値の誤差など、「2つの値がどれくらい離れているか」を符号なしで求めたいケースです。

=ABS(A2-B2)

A2が東京の気温「5℃」、B2が札幌の気温「-3℃」なら、A2-B2 は「8」。逆にA2が「-3」、B2が「5」なら「-8」ですが、ABS関数で同じく「8」になります。

入力順を気にせずに「2点間の距離」を求められるのがポイントです。製造現場の寸法誤差や、テスト点数の前後比較など、絶対誤差を扱うシーンで定番のパターンですよ。

パターン5: 符号別に「絶対値の合計」を集計する

データの中にプラスとマイナスが混在しているとき、相殺せずに「動いた量の総和」を出したいケースです。たとえば株価の値動き列に、上昇日と下落日が混ざっているような場面ですね。

=SUMPRODUCT(ABS(B2:B100))

SUMPRODUCT関数で各セルの絶対値をまとめて合計します。=SUM(ABS(B2:B100)) でも同じ結果になりますが、SUM関数は配列処理を明示しないと正しく動かない場合があるので、SUMPRODUCTを使うか後述のARRAYFORMULAを使うほうが安全です。

応用として「プラスとマイナスを別々に集計したい」場合は、SIGN関数と組み合わせます。

=SUMPRODUCT((SIGN(B2:B100)=1)*B2:B100)   → 正の値だけ合計
=SUMPRODUCT((SIGN(B2:B100)=-1)*ABS(B2:B100))  → 負の値の絶対値だけ合計

増減の総量、上昇幅と下落幅の比較などに使えるパターンです。

パターン6: ARRAYFORMULAで列全体を一括処理する

スプレッドシート特有の機能、ARRAYFORMULAと組み合わせると、1つの数式で列全体の絶対値を一気に求められます。

=ARRAYFORMULA(ABS(B2:B100))

この1行で、B2からB100までの絶対値を一括計算できます。フィルダウンが不要なので、データが増減しても式が崩れず、フォーム回答のように行が後から追加されるシートでも自動追従しますよ。

空白行を空のまま残したいときは、IFで条件分岐を入れます。

=ARRAYFORMULA(IF(B2:B100="", "", ABS(B2:B100)))

差額の絶対値を一括で出したい場合も同じ要領です。

=ARRAYFORMULA(IF(B2:B100="", "", ABS(B2:B100-C2:C100)))

集計列の数式を1セルに集約できるので、シートが見やすくなり、メンテナンスも楽になります。

ABS関数とSIGN関数は「大きさ」と「方向」のペア

ABS関数を使いこなすうえで、ぜひセットで覚えておきたいのがSIGN関数です。2つの関数は数値を扱ううえで対になる存在です。

  • ABS関数: 数値の「大きさ」(絶対値)を取り出す → 常に0以上
  • SIGN関数: 数値の「方向」(符号)を取り出す → 1, -1, 0

この2つを掛け合わせると、元の数値を復元できます。

=ABS(-15) * SIGN(-15)   → 15 × (-1) = -15
=ABS(15)  * SIGN(15)    → 15 × 1    = 15
=ABS(0)   * SIGN(0)     → 0  × 0    = 0

つまり ABS(x) × SIGN(x) = x という関係が常に成り立ちます。この性質を使うと「大きさだけを加工して、符号は元のまま残す」処理がきれいに書けます。

符号を保持したまま端数を丸める

金額の端数処理で、プラス・マイナスの符号はそのまま残したいパターンです。A2に金額が入っているとします。

=SIGN(A2) * ROUNDDOWN(ABS(A2), -2)

A2が「-1,234」のときの動きを追ってみましょう。

  1. ABS(A2) で絶対値「1,234」に変換
  2. ROUNDDOWN関数で百の位で切り捨てて「1,200」
  3. SIGN(A2) の「-1」を掛けて「-1,200」

A2が「1,234」の場合も同じ式で「1,200」になります。普通に =ROUNDDOWN(A2, -2) と書くと、負の数のときに「ゼロ方向」へ丸まるか「マイナス方向」へ丸まるかでズレが出ることがあります。SIGN×ABSの組み合わせなら、必ず「絶対値が小さくなる方向」に丸まるので、損益データのように符号が混在するケースでも安心して使えますよ。

符号を保持したまま上限を設定する

絶対値に上限を設けつつ、符号はそのまま残したいパターンです。

=SIGN(A2) * MIN(ABS(A2), 1000)

A2が「-1,500」なら、絶対値1,500を上限1,000に制限したうえで、符号「-1」を掛けて「-1,000」が返ります。A2が「1,500」なら「1,000」、A2が「-500」なら上限を超えていないのでそのまま「-500」になります。

ポイント還元の上限処理や、損益のキャップ計算、外れ値の抑制処理などで重宝するパターンです。

単純に「常に正」「常に負」にしたい場合

「符号は気にせず、とにかく正の値にしたい」だけなら、SIGN関数を使わず =ABS(A2) だけでOKです。逆に「常に負の値として扱いたい」場合は =-ABS(A2) と書けば、A2が正でも負でも必ず負の値が返ります。SIGN関数を組み合わせるのは、あくまで「元の符号を保持したい」場面に限定するのがシンプルですよ。

ABS関数のよくあるエラーと対処法

ABS関数は引数1つのシンプルな関数ですが、エラーが出ることもあります。原因と対処法を整理しておきます。

エラー・現象原因対処法
#VALUE!引数に数値変換できない文字列が入っているセル参照先が数値かどうか確認する。ISNUMBER関数で事前チェック
#ERROR!構文ミス(カッコ忘れ、引数なし等)数式の入力内容を見直す
#N/A引数がエラー値(VLOOKUP等のエラー結果)元のエラーを先に解決する
結果が0になる空白セルを参照している空白は数値の0として扱われるため正常動作
プラスのままで何も変わらないもともと正の数を渡しているABS関数の正常動作。マイナス値を渡すと初めて符号が外れます

文字列が混在しているとき(#VALUE!対策)

ABS関数に純粋な文字列を渡すと #VALUE! エラーになります。

=ABS("abc")    → #VALUE!
=ABS("-100")   → 100(数値に変換できればOK)

「-100」のように数値として解釈できる文字列はエラーになりませんが、「abc」のような純粋な文字列はエラーです。セル参照先に文字列が混じる可能性があるときは、ISNUMBER関数で事前にチェックすると安全です。

=IF(ISNUMBER(A1), ABS(A1), "数値を入力してください")

IFERROR関数で囲んでエラーを隠す書き方もありますが、原因の特定が遅れるので、まずは事前チェックを推奨します。

空白セルと「本当の0」を区別したいとき

ABS関数に空白セルを渡すと「0」が返ります。これは空白セルが数値の「0」として扱われるためで、エラーではありません。差額計算で一方が未入力だと、もう一方の値がそのままズレ幅として表示されてしまうので注意が必要です。

データが未入力なのか本当にゼロなのかを区別したい場合は、IFで事前に空白判定を入れます。

=IF(OR(A1="", B1=""), "未入力", ABS(A1-B1))

これで両方のセルに数値が入っているときだけ差額の絶対値を計算し、片方でも空白なら「未入力」と表示できます。

ABS関数と似た関数の使い分け

ABS関数と混同しやすい関数はあまりありませんが、符号や丸めに関連する関数との違いを知っておくと、使い分けがクリアになります。

関数動作引数戻り値ABS関数との違い
ABS絶対値を返す1つ常に0以上の数値本記事の主役
SIGN符号を判定する1つ1, 0, -1 のいずれか「方向」を取り出す。ABSの対になる関数
INT整数に切り捨てる1つ整数小数の切り捨て。符号は変えない
ROUND四捨五入する2つ指定桁の数値桁の丸め。符号は変えない
IFERRORエラーを別の値に置き換える2つ任意エラー処理。絶対値とは無関係

ABSと「マイナス1を掛ける」の違い

マイナスを取り除きたいだけなら =A2*-1 で符号を反転させる手もありますが、これは「もともと負の数だった」場合にしか機能しません。

=ABS(-5)    → 5
=-5*-1      → 5
=ABS(5)     → 5
=5*-1       → -5

プラスの値に「-1」を掛けるとマイナスになってしまうので、符号が混在しているデータには使えません。ABS関数なら入力がプラスでもマイナスでも、常に0以上の値が返るので安全です。

ABSとSIGNの使い分け

「大きさだけ知りたい」ならABS関数、「方向だけ知りたい」ならSIGN関数です。

=ABS(-5)   → 5(大きさ)
=SIGN(-5)  → -1(方向)

両方を組み合わせれば元の値を復元できる、というのが2つの関数の関係です。差額計算で「ズレの大きさ」だけが欲しいなら ABS関数だけ、達成・未達のラベルもあわせて出したいなら SIGN関数と併用 という使い分けが基本ですよ。

ABS関数のよくある質問(FAQ)

Q1. ABS関数とSIGN関数、どちらを使えばいい?

A. 「ズレの大きさ」だけが欲しいならABS関数、「方向(プラス/マイナス/ゼロ)」だけ知りたいならSIGN関数です。両方ほしいときは別列に並べると見やすくなりますよ。

Q2. ABS関数で空白セルを渡すと何が返る?

A. 「0」が返ります。空白セルは数値の0として扱われるためです。差額計算で片方が空白だとズレ幅がそのまま入ってしまうので、=IF(OR(A1="", B1=""), "未入力", ABS(A1-B1)) のように事前判定を入れると安全です。

Q3. ABS関数と「-1を掛ける」の違いは?

A. =A2*-1負の数を正にする だけで、もともと正の数だった場合はマイナスになってしまいます。ABS関数なら入力がプラスでもマイナスでも常に0以上の値が返ります。符号が混在するデータには必ずABS関数を使いましょう。

Q4. ABS関数を列全体に一気に適用したい

A. ARRAYFORMULAを使います。=ARRAYFORMULA(ABS(B2:B100)) と書けばフィルダウン不要で範囲全体を一括処理できます。差額の絶対値も =ARRAYFORMULA(ABS(B2:B100-C2:C100)) でまとめて出せますよ。

Q5. 絶対値の合計を出したい

A. =SUMPRODUCT(ABS(B2:B100)) が確実です。=SUM(ABS(B2:B100)) でも動くケースが多いですが、配列処理が正しく評価されない環境もあるので、SUMPRODUCTかARRAYFORMULAを使うと安心です。

Q6. ABS関数の結果がマイナスになることはある?

A. ありません。ABS関数の戻り値は必ず 0以上 です。もしマイナスが返ってきたら、ABS関数の外側で別の計算(=-ABS(A2) など)が掛かっていないかを確認してください。

Q7. 「常に負の値にしたい」場合は?

A. =-ABS(A2) と書けば、A2が正でも負でも必ず負の値が返ります。逆に「常に正」なら =ABS(A2) のみでOKです。

ExcelのABS関数との違い

ABS関数はExcelとGoogleスプレッドシートで完全に同じ動作です。引数名の表記が若干違うだけで、機能差はほぼありません。

項目ExcelGoogleスプレッドシート
構文=ABS(数値)=ABS(値)
動作絶対値を返す絶対値を返す
負の数-5 → 5-5 → 5
正の数5 → 55 → 5
ゼロ0 → 00 → 0
空白セル00
文字列#VALUE!#VALUE!
配列処理スピル対応(Microsoft 365)ARRAYFORMULAで指定

ファイルを共有しても計算結果がずれることはありません。列全体への適用方法だけが違うので、Excelから移行した場合は「列一括処理は ARRAYFORMULA で囲む」というポイントを押さえておくと安心です。

Excel版の詳しい解説や歴史的経緯はExcelのABS関数の使い方で紹介していますので、Excelとの比較資料として併用してみてください。

まとめ:ABS関数で「ズレの大きさ」を素早く取り出そう

スプレッドシートのABS関数は、数値の絶対値(マイナス符号を取り除いた0以上の値)を返す1引数のシンプルな関数です。ポイントを整理します。

  • 構文は =ABS(値)。負の数なら符号を外し、正の数とゼロはそのまま返す
  • 予算と実績の差額は =ABS(B2-C2) で「ズレの大きさ」だけ取り出せる
  • 目標からの乖離率は =ABS(C2-B2)/B2 で方向に関係なく比較できる
  • 在庫の過不足は「ズレ幅(ABS)」と「方向(SIGN関数IF関数)」を別列に分けると見やすい
  • 列全体への適用はARRAYFORMULAで1行にまとめられる
  • SIGN関数とは「大きさ」と「方向」のペア。ABS(x) × SIGN(x) = x で元の値を復元できる
  • 「符号を保持したまま丸める/上限を設ける」処理は SIGN×ABS の組み合わせが定石
  • 絶対値の合計は =SUMPRODUCT(ABS(B2:B100)) が確実

まずは =ABS(B2-C2) で予算実績の差額を出すところから試して、慣れてきたら ARRAYFORMULA や SIGN関数との組み合わせに広げてみてください。符号に振り回されずに「数値の大きさ」だけを扱えるようになると、レポートも集計もぐっとシンプルになりますよ。

タイトルとURLをコピーしました