スプレッドシートのSIGN関数で正負判定|損益分類・矢印表示・ABS関数との組み合わせまで

スポンサーリンク

売上の増減や在庫の過不足を一覧表で管理していると、「この数値はプラスなのかマイナスなのか」をパッと見分けたい場面ってありますよね。たとえば月次の損益表で黒字・赤字を自動分類したいときや、前月比に「▲」「▼」の矢印を付けたいときです。

IF関数で条件分岐を書く方法もありますが、正・負・ゼロの3パターンを判定するにはIFのネストが必要です。式が長くなって、後から見たときに読みづらいですよね。

そんなときに便利なのが SIGN関数 です。数値を1つ渡すだけで、正なら「1」、負なら「-1」、ゼロなら「0」を返してくれます。1, -1, 0 という数値が返るのがポイントで、CHOOSE関数ABS関数と組み合わせると、IF関数では書きにくい処理がスッキリ書けます。

この記事ではSIGN関数の基本構文から、損益の自動分類・前月比の矢印表示・ABS関数を組み合わせた符号保持の丸め処理・ARRAYFORMULAによる一括判定まで、実務でそのまま使える6パターンを早見表付きで紹介します。エラー対処やExcelとの違いも整理しますよ。

スプレッドシートのSIGN関数とは?符号判定の基本

SIGN関数(読み方: サイン関数)は、数値の符号(正・負・ゼロ)を判定する関数です。名前は英語の「sign(符号・記号)」がそのまま由来になっています。

引数に数値を1つ渡すと、次の3つのいずれかが返ります。

  • 正の数 → 1
  • 負の数 → -1
  • ゼロ → 0

数値の「大きさ」ではなく「方向」だけを取り出す関数、と覚えるとイメージしやすいです。たとえば =SIGN(1000)=SIGN(0.001) もどちらも結果は「1」で、値の大小は関係ありません。

SIGN関数で何ができる?

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

  • 月次の損益を「黒字」「赤字」「収支ゼロ」に自動分類したいとき
  • 前月比に「▲」「▼」の矢印記号を付けて視覚化したいとき
  • 売上の増減方向だけを集計(プラスの件数・マイナスの件数)したいとき
  • ABS関数と組み合わせて「大きさだけ丸めて、符号は元のまま」という処理をしたいとき
  • IF関数のネストを書きたくないとき

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

SIGN関数の構文と引数

基本構文

=SIGN(値)

カッコの中に「符号を判定したい数値」を1つ入れるだけです。引数は1つだけなのでとてもシンプルですね。

引数の説明

引数必須/任意説明
必須符号を判定したい数値、セル参照、または数式

結果は必ず「1」「-1」「0」のいずれかになります。それ以外の値は返りません。

戻り値の早見表

引数戻り値意味
正の整数(例: 100)1正の数
正の小数(例: 0.001)1正の数
負の整数(例: -50)-1負の数
負の小数(例: -0.5)-1負の数
ゼロ(0)0ゼロ
空白セル0空白は数値の0として扱われる
文字列(例: “abc”)#VALUE!エラー

「正の数はすべて1、負の数はすべて-1」というのが基本ルールです。値の大小は結果に影響しません。

SIGN関数の基本的な使い方

数値を直接渡す

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

=SIGN(10)      → 1
=SIGN(-10)     → -1
=SIGN(0)       → 0
=SIGN(3.14)    → 1
=SIGN(-0.001)  → -1

正の数はすべて「1」、負の数はすべて「-1」、ゼロは「0」が返るのがわかりますね。

セル参照を使う

01 data sample table

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

=SIGN(A2)
02 formula sign basic

セル参照にしておけば、A2の値が変わっても自動で判定結果が更新されます。一覧表でフィルダウン(下方向にコピー)すれば、列全体に対して符号判定ができますよ。

数式の結果に対して使う

引数には数式を直接書くこともできます。たとえば「B2とC2の差の符号」を判定するパターンです。

=SIGN(B2-C2)

B2が「80」、C2が「100」なら、B2-C2は「-20」になります。SIGN関数で「-1」が返ります。前月比や差分の方向判定でよく使うパターンです。

基本パターンの早見表

数式結果意味
=SIGN(100)1正の数
=SIGN(-50)-1負の数
=SIGN(0)0ゼロ
=SIGN(A2)1, -1, 0 のいずれかセル参照
=SIGN(B2-C2)1, -1, 0 のいずれか差分の符号
=SIGN(SUM(A2:A10))1, -1, 0 のいずれか合計の符号
03 result sign basic

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

ここからは、実務でよく使うSIGN関数の活用パターンを紹介します。「ラベル表示」「矢印表示」「条件付き集計」「符号保持の数値加工」など、IF関数だけでは書きにくい処理がSIGN関数を使うとスッキリ書けますよ。

パターン1: 損益を「黒字/赤字/収支ゼロ」に自動分類する

月ごとの損益額を3パターンのラベルに自動分類するパターンです。B2セルに損益額が入っているとします。

=IF(SIGN(B2)=1, "黒字", IF(SIGN(B2)=-1, "赤字", "収支ゼロ"))

SIGN関数の結果(1, -1, 0)をIF関数で判定して、ラベルを付けています。

TIP: IF関数だけで書くと =IF(B2>0, "黒字", IF(B2<0, "赤字", "収支ゼロ")) です。この場合はIF関数のほうがシンプルですね。SIGN関数の真価は、次に紹介するCHOOSE関数やABS関数との組み合わせ、数値計算に符号を活用する場面で発揮されます。

パターン2: 前月比の増減方向を矢印で表示する(CHOOSEとの組み合わせ)

売上の前月比をもとに「▲(増加)」「−(変動なし)」「▼(減少)」の矢印を表示するパターンです。ダッシュボードや報告資料でよく使います。

=CHOOSE(SIGN(C2-B2)+2, "▼", "−", "▲")
04 result sign choose arrow

仕組みはこうです。

  1. C2-B2 で前月比を計算
  2. SIGN(...) で -1, 0, 1 のいずれかに変換
  3. +2 を足して 1, 2, 3 に変換
  4. CHOOSE関数で1番目="▼"、2番目="−"、3番目="▲"を取り出す

CHOOSE関数は引数の番号(1から始まる整数)に対応する値を返す関数です。SIGN関数で必ず -1, 0, 1 が返ることを利用して、3パターンの分岐を1行でスッキリ書けます。IF関数のネストよりも読みやすいのがポイントです。

パターン3: 前月比に増減ラベルを付ける(CHOOSEとの組み合わせ・文字版)

矢印ではなく、文字でラベルを付けたい場合も同じパターンが使えます。

=CHOOSE(SIGN(C2-B2)+2, "減少", "変動なし", "増加")

CHOOSE関数の引数を文字ラベルに差し替えるだけです。社内資料では文字ラベル、ダッシュボードでは矢印、と使い分けると見やすくなります。

パターン4: 符号別に件数や合計を集計する(SUMPRODUCTとの組み合わせ)

データの中から「プラスの値だけ」「マイナスの値だけ」を集計したいケースです。B2:B10に金額が入っているとします。

正の値だけ合計するパターン:

=SUMPRODUCT((SIGN(B2:B10)=1)*B2:B10)

負の値だけ合計するパターン:

=SUMPRODUCT((SIGN(B2:B10)=-1)*B2:B10)

SUMPRODUCT関数で「SIGNの結果が1(または-1)の行だけ」を条件にして掛け合わせ、合計しています。SUMIFよりも柔軟に条件を書けるので、複合条件の集計でも使えるパターンです。

件数だけ知りたい場合は、掛け算する値を1にします。

=SUMPRODUCT((SIGN(B2:B10)=1)*1)   → プラスの件数
=SUMPRODUCT((SIGN(B2:B10)=-1)*1)  → マイナスの件数

パターン5: 符号を保持したまま端数を丸める(ABSとの組み合わせ)

金額の端数を丸めつつ、プラス・マイナスの符号はそのまま残したいパターンです。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の組み合わせなら、必ず「絶対値が小さくなる方向」に丸まります。

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

スプレッドシート特有の機能、ARRAYFORMULAと組み合わせると、1つの数式で列全体を一括判定できます。

=ARRAYFORMULA(SIGN(B2:B100))

この1行で、B2からB100までの符号判定を一気に行えます。フィルダウンする必要がなく、データ行が増減しても自動追従するのがメリットです。

矢印表示と組み合わせるなら次のように書きます。

=ARRAYFORMULA(IF(B2:B100="", "", CHOOSE(SIGN(B2:B100)+2, "▼", "−", "▲")))

IF(B2:B100="", "", ...) で空白行は空白のまま残し、データがある行だけ矢印を表示しています。これでフォーム回答や追加データにも自動対応するダッシュボードが作れますよ。

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

SIGN関数とABS関数は、数値を扱う上で対になる関数です。役割を整理しておくと、組み合わせ技が理解しやすくなります。

  • SIGN関数: 数値の「方向」(符号)を取り出す → 1, -1, 0
  • ABS関数: 数値の「大きさ」(絶対値)を取り出す → 常に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 という関係が常に成り立ちます。この性質を使うと「大きさだけを加工して、符号は元のまま」という処理がきれいに書けます。

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

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

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

A2が「-1,500」なら、動きはこうです。

  1. ABS(A2) で絶対値「1,500」
  2. MIN関数で上限1,000に制限して「1,000」
  3. SIGN(A2) の「-1」を掛けて「-1,000」

A2が「1,500」なら「1,000」、A2が「-500」なら「-500」(上限を超えていないのでそのまま)になります。ポイント還元の上限処理や、損益のキャップ計算で使えるパターンです。

符号を反転させる(マイナス符号を付ける)

たとえば「常に負の値として扱いたい」場合は、SIGN関数を使わずに -ABS(A2) と書くのが簡単です。逆に「常に正の値として扱いたい」なら ABS(A2) だけでOKです。SIGN関数を使うのは、あくまで「元の符号を保持したい」場合ですね。

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

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

エラー・現象原因対処法
#VALUE!引数に文字列が入っているセル参照先が数値かどうか確認する。ISNUMBER関数で事前チェック
#ERROR!構文ミス(カッコ忘れ、引数なし等)数式の入力内容を見直す
#N/A引数がエラー値(VLOOKUP等のエラー結果)元のエラーを先に解決する
常に0が返る空白セルを参照している空白セルは0として扱われるため正常動作。未入力と区別したい場合は下記参照

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

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

=SIGN("abc")   → #VALUE!
=SIGN("100")   → 1(文字列でも数値に変換できれば動く)

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

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

IFERROR関数で囲んでエラーを隠す方法もありますが、原因の特定が遅れるのでおすすめしません。事前チェックのほうが安全ですよ。

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

SIGN関数に空白セルを渡すと「0」が返ります。これは空白セルが数値の「0」として扱われるためで、エラーではありません。

ただし「データが未入力なのか、本当にゼロなのか」を区別したいケースもあります。その場合はIF関数で事前に空白判定を入れます。

=IF(A1="", "未入力", SIGN(A1))

これで未入力のセルには「未入力」、数値が入っているセルには SIGN関数の結果(1, -1, 0)が返ります。

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

符号判定や条件分岐に使える関数は他にもあります。SIGN関数とどう使い分けるか整理しておきます。

関数動作引数戻り値SIGN関数との違い
SIGN符号を判定する1つ1, 0, -1 のいずれか本記事の主役
ABS絶対値を返す1つ常に0以上の数値「大きさ」を取り出す。SIGNの対になる関数
IF条件で分岐する3つ条件に応じた値ラベル表示はIFが読みやすい
CHOOSE番号で値を選ぶ2つ以上選ばれた値SIGN+2と組み合わせて3パターン分岐
ISNUMBER数値かを判定1つTRUE/FALSE符号ではなく型をチェック

SIGN関数とIF関数の使い分け

SIGN関数の結果は、IF関数で書くと次のようになります。

=IF(A1>0, 1, IF(A1<0, -1, 0))

この式は =SIGN(A1) と完全に同じ結果です。

ラベル(「黒字」「赤字」等)を表示したい場合は IF関数 が読みやすいです。符号の数値(1, -1, 0)をそのまま計算に使いたい、または CHOOSE関数 と組み合わせて3パターン分岐したい場合は SIGN関数 がシンプルですよ。

SIGN関数とABS関数の使い分け

ABS関数は「大きさ」、SIGN関数は「方向」を取り出します。

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

「大きさだけ知りたい」ならABS関数、「方向だけ知りたい」ならSIGN関数です。両方組み合わせれば元の値を復元できる、というのが2つの関数の関係です。

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

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

A. ラベル(「黒字」「赤字」など)を表示したい場合はIF関数が読みやすいです。符号の数値(1, -1, 0)を計算に使いたい、またはCHOOSE関数で3パターン分岐したい場合はSIGN関数が向いています。

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

A. 「0」が返ります。空白セルは数値の0として扱われるためです。未入力と0を区別したい場合は =IF(A1="", "未入力", SIGN(A1)) のように事前確認を入れます。

Q3. ABS関数とSIGN関数をかけると元の値に戻る?

A. はい、=ABS(A1) * SIGN(A1) は元の値と同じになります。ABS(x) × SIGN(x) = x という関係が常に成り立ちます。この性質を利用して「大きさだけ加工して符号はそのまま」という処理が書けます。

Q4. SIGN関数の結果を矢印(▲▼)に変換するベストな書き方は?

A. =CHOOSE(SIGN(A1)+2, "▼", "−", "▲") が一番スッキリ書けます。SIGN関数の結果(-1, 0, 1)に2を足すと(1, 2, 3)になるので、CHOOSE関数の引数番号にちょうど対応します。

Q5. SIGN関数を列全体に一気に適用したい

A. ARRAYFORMULAを使います。=ARRAYFORMULA(SIGN(B2:B100)) と書けば、フィルダウン不要で範囲全体を一括判定できます。

Q6. 文字列が混じった列でもSIGN関数を使いたい

A. ISNUMBER関数で事前チェックします。=IF(ISNUMBER(A1), SIGN(A1), "") のように書けば、文字列のセルではエラーを返さず空白を表示できます。

ExcelのSIGN関数との違い

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

項目ExcelGoogleスプレッドシート
構文=SIGN(数値)=SIGN(値)
動作符号を判定する符号を判定する
正の数11
負の数-1-1
ゼロ00
空白セル00
文字列#VALUE!#VALUE!
ARRAYFORMULA対応不要(スピル対応)必要(ARRAYFORMULA)

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

Excel版の詳しい解説は ExcelのSIGN関数の使い方 をご覧ください。

まとめ:SIGN関数で符号判定をスッキリ書こう

SIGN関数は、数値の符号(正・負・ゼロ)を判定する1引数のシンプルな関数です。ポイントを整理します。

  • 構文は =SIGN(値)。正なら1、負なら-1、ゼロなら0を返す
  • ラベル表示はIF関数、3パターン分岐は SIGN+CHOOSE がスッキリ
  • 前月比の矢印表示は =CHOOSE(SIGN(C2-B2)+2, "▼", "−", "▲") が定番
  • 符号別の集計は SIGN+SUMPRODUCT で柔軟に書ける
  • ABS関数とは「方向と大きさ」のペア。ABS(x) × SIGN(x) = x で元の値を復元できる
  • 「符号を保持したまま丸める/上限を設ける」処理は SIGN×ABS の組み合わせが定石
  • 列全体への適用はARRAYFORMULAで1行化できる

まずは =SIGN(A2) でセルの符号を判定するところから試して、慣れてきたらCHOOSE関数やABS関数との組み合わせに挑戦してみてください。IF関数のネストを書く前に「SIGNで書けないか?」と発想を切り替えるだけで、数式の見通しがグッと良くなりますよ。

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