🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel ABS & SIGN — 絶対値・大きさ、そして捨て去る符号

|

Excel ABS & SIGN — 絶対値・大きさ、そして捨て去る符号

TL;DR — どんな数値も 2 つの事実を抱えています。どれだけ大きいか(大きさ)と どちらを向いているか(符号)です。ABS(number) は大きさを残して向きを捨てます — ABS(-7)ABS(7) もどちらも 7 を返します。SIGN(number) はその逆で、向きを -10+1 として残し、大きさを捨てます。ABS の代表的な用途は、向きを気にせずに 比較することです — 許容差チェックは =ABS(A-B)<=tol であって、決して =A-B<=tol では ありません。そして 2 つの関数は、きれいな 1 つの恒等式にまとまります。 number = SIGN(number) * ABS(number)

=ABS(-7)        ' -> 7      大きさ:0 からの距離
=ABS(7)         ' -> 7
=SIGN(-7)       ' -> -1     向きだけ
=SIGN(0)        ' -> 0      結果は 2 つではなく 3 つ
=ABS(Actual - Forecast) <= 0.05 * Forecast   ' 5% 以内か?(向きは無視)

「差異が半分くらいの確率でマイナスになるのはなぜ?」「許容差以内のはずのテストが巨大な誤差を すり抜けさせる」— こうした悩みのほとんどは、たった 1 つの取り違えに行き着きます。本当に必要 だったのは数値の 大きさ なのに、その に手を伸ばしてしまうのです。ABS と SIGN は、 その 2 つを意図的に切り分けるための関数です。

この記事で学べること

  • 考え方の軸:数値は 大きさ × 向き である
  • 許容差・差異チェックに A-B ではなく ABS(A-B) が必要な理由
  • SIGN の本当の用途:分類とゼロ交差の検出
  • 恒等式 x = SIGN(x) * ABS(x) と、それが効いてくる場面
  • SIGN(0)=0 が、必ず処理すべき 3 通り の結果である理由
  • ABS を 使うべきでない とき — 隠れた符号はバグかもしれない

考え方の軸:大きさ × 向き

数直線を思い浮かべてください。どんな数値も、互いに独立した 2 つのことで言い表せます。0 から の距離(大きさ)と、0 のどちら側にあるか(向き)です。ABS は 1 つ目の問いに答えて 2 つ目を 忘れ、SIGN は 2 つ目に答えて 1 つ目を忘れます。

=ABS(-250)     ' -> 250    「0 からどれだけ遠いか」— 250、向きは捨てる
=SIGN(-250)    ' -> -1     「どちら向きか」— 負、大きさは捨てる

この 2 つの問いを切り分けておくこと、それがスキルのすべてです。「予測と実績の差はどれだけ 大きいか?」と問うた瞬間、欲しいのは大きさであり、符号はノイズです。「この口座は増えたか 減ったか?」と問うた瞬間、欲しいのは向きであり、大きさはノイズです。バグは、片方だけを求めて いる問いに対して、両方を混ぜ込んだ生の値を使ったときに起こります。

代表的な用途:許容差チェックには ABS が要る

これは、このページで最も重要なパターンです。2 つの数値がある許容差を超えて食い違ったときに 印を付けたい、とします。素朴なテストは、こっそり壊れています。

=IF(Actual - Forecast > 5, "off", "ok")          ' バグ
=IF(ABS(Actual - Forecast) > 5, "off", "ok")     ' 正しい

最初の版は 一方向の 誤差しか捉えません。ActualForecast を大きく 下回って 入って くると、Actual - Forecast は大きな 負の 数になり、これは 5 より大きくないため、数値が とんでもなくずれているのにチェックは「ok」と言い張ります。大きさを見たい差は ABS で 囲む必要があります。 気にしているのは差がどれだけ大きいかであって、どちらに傾いているかでは ないからです。同じ理屈が平均絶対偏差を支えています — これは、自分自身で打ち消し合ってしまう 「平均誤差」よりもきれいなばらつきの指標です。

=SUMPRODUCT(ABS(data - AVERAGE(data))) / COUNT(data)   ' 平均絶対偏差

ABS がなければ、正と負の偏差が打ち消し合って ≈0 になります — これはまさに、絶対値を 渡したときに SUMPRODUCT が避けるために作られている 落とし穴です。

SIGN の本当の用途:分類とゼロ交差の検出

SIGN は、どんな数値も 3 つのトークン — -10+1 — のいずれかに畳み込みます。これに より、コンパクトな分類器にも、変化の検出器にもなります。その存在を正当化する用途が 2 つ あります。

=SIGN(Change)                          ' -1 減少 / 0 変化なし / +1 増加 を 1 列で
=IF(SIGN(B3) <> SIGN(B2), "crossed", "")   ' 系列がゼロを跨いだ箇所に印

2 つ目が気の利いた使い方です。連続する行のあいだで符号が変わる ということは、系列が ゼロを通り抜けたことを意味します — 価格が損益分岐点を跨ぐ、残高がマイナスに転じる、センサーの 読み取り値が極性を反転する、といった具合です。SIGN の値を比較すれば、AND(B2>0, B3<0) の ようなややこしい曲芸なしにゼロ交差を捉えられます。SIGN は、向きを表す乗数の自然な相棒でも あります。=Quantity * SIGN(Flow)IF なしで +1/−1 を掛けます。

2 つを結ぶ恒等式

概念のすべてを 1 行に圧縮すると、こうなります。

number = SIGN(number) * ABS(number)

向き × 大きさで、元の数値が再構成されます。ただの豆知識に見えますが、値を部品から組み 立て直す 必要が出てくると効いてきます — 最も役立つのは、負の数の奇数乗根をとる場面です。 これは素のべき乗が拒む操作です(POWER & SQRT ガイドで説明する とおり、=(-8)^(1/3)#NUM! になります)。

=SIGN(-8) * ABS(-8)^(1/3)     ' -> -2    負数の立方根、符号を保ったまま

累乗根は大きさに対して計算し(これは常に合法です)、元の符号をあとから貼り戻します。これが、 恒等式が値打ちを発揮するところです。

SIGN(0) = 0 は 3 通りの結果

SIGN を 2 択だと思い込まないでください。返しうる値は 3 つ あり、その 3 つ目 — ちょうど ゼロの入力に対する 0 — こそが、手抜きコードを壊すものです。

=IF(SIGN(x) = 1, "up", "down")     ' バグ:ちょうど 0 が「down」と誤ラベルされる
=IF(x > 0, "up", IF(x < 0, "down", "flat"))   ' 3 通りすべてを処理

SIGN で分岐するなら 0 のケースを必ず織り込むか、あるいは素直に >0 / <0 で直接 比較しましょう。これは IS 関数 が教えるのと同じ規律です。 テストが実際に持つ結果の数に、分岐の数を合わせるのです。

ABS を使うべきでないとき

ABS はあまりに便利なので、人は反射的に差を囲んでしまいます — そして、そこで道具が隠蔽工作に 変わります。ABS は、向きが本当にどうでもよいとき のためのものです(許容差、距離、 大きさ)。差が 本来は 正であるべきなのに、「きれいにする」ために ABS をかぶせたら、 ロジックが逆になっている行をただ隠しただけです。赤字の数値を消すために ABS に手を伸ばすのは、 誰にも見えない形で間違ったモデルを世に出す道です。区別しておく価値のある、関連する 2 点を 挙げます。

  • 負の値をゼロで下限打ちしたいなら、ABS(x) ではなく MAX(x, 0) を使うこと。 MAX(-5,0)0ABS(-5)5 です。意図が違います — 一方は切り詰め、もう一方は折り返します。
  • 値を変えずに数値を正として 表示 したいなら(会計スタイル)、ABS ではなく 表示形式 を使うこと。ABS は格納された値そのものを変え ますが、表示形式は見た目を変えるだけです。並べ替えや計算は、本物の数値を見ます。

判断のポイント

まず問いを立て、それから関数を選びましょう。「差はどれだけ大きいか/どれだけ離れているか/ ばらつきはどれくらいか?」→ 大きさ → ABS。「どちらに動いたか/損か益か/交差したか?」→ 向き → SIGN。「両方を組み合わせ直したい?」→ SIGN(x)*ABS(x) の恒等式。最も被害を防ぐ たった 1 つの習慣は、予期しなかった符号を ABS で塗りつぶすのを拒むことです — 差がマイナスに なって驚いたなら、囲む前にロジックを調べましょう。ABS は意図を表現するものであって、証拠を 握りつぶすものではありません。

ExcelMaster が役立つ場面

許容差のロジックは、見た目に反して微妙に間違えやすく、しかもそのバグはあらゆる正常系 テストを通過してしまいます。ExcelMaster に「実績が予測から 5% 以上ずれている行に印を 付けて」と伝えれば、ABS(Actual-Forecast) > 0.05*Forecast を書いてくれます — ABS が きちんと入っているので、下振れも上振れも両方捉えられます。「増加/減少/変化なしを 1 列で」 と頼めば、損益分岐をこっそり誤ラベルする 2 択の IF ではなく、ゼロのケースを処理した SIGN を使います。あなたが説明した意図を、そのまま書いてくれます — 数値がおかしくなって初めて気づく はずだった符号の扱いまで含めて。

よくある質問

Excel で絶対値を求めるには?

=ABS(number) を使います。これは大きさ — 0 からの距離 — を返すので、=ABS(-7)=ABS(7) もどちらも 7 を返します。差の絶対値をとるときは、式全体を囲みます:=ABS(A2-B2)

Excel で数値を正の値にするには?

=ABS(number) は符号を取り除いて、どんな数値も正にします。一方、負の 数だけをゼロに置き 換えたい(正の数はそのまま残したい)場合は =MAX(number, 0) を使います。そして、値を変えずに 負の数を正として 表示 したいだけなら、数式ではなく表示形式を適用しましょう。

Excel の SIGN 関数は何を返しますか?

=SIGN(number) は、数値が負なら -1、ちょうどゼロなら 0、正なら +1 を返します。向きだけ を報告し、大きさは捨てます — 損益の分類や、系列がゼロを跨ぐ箇所(2 つのセルのあいだの符号の 変化)の検出に便利です。

Excel の ABS と SIGN の違いは何ですか?

ABS は数値の 大きさ を残して符号を落とし(ABS(-7)=7)、SIGN向き-1/0/+1 として残して大きさを落とします(SIGN(-7)=-1)。2 つを合わせると、恒等式 number = SIGN(number) * ABS(number) が成り立ちます。

Excel で 2 つの数値が許容差以内かを確認するには?

絶対 差を許容差と比較します:=ABS(A2-B2) <= toleranceABS なしの =A2-B2 <= tolerance は一方向の誤差しか捉えず、大きな負の差を「許容差以内」として すり抜けさせてしまいます。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-10。

関連ガイド: Excel POWER & SQRT · Excel EXP, LN & LOG · Excel SUMPRODUCT · Excel IS Functions