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

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

セル参照にしておけば、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 のいずれか | 合計の符号 |

実務での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, "▼", "−", "▲")

仕組みはこうです。
C2-B2で前月比を計算SIGN(...)で -1, 0, 1 のいずれかに変換+2を足して 1, 2, 3 に変換- 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」の場合の動きを追ってみましょう。
ABS(A2)で絶対値「1,234」に変換- ROUNDDOWN関数で百の位で切り捨てて「1,200」
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」なら、動きはこうです。
ABS(A2)で絶対値「1,500」- MIN関数で上限1,000に制限して「1,000」
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スプレッドシートで完全に同じ動作です。引数名の表記が若干違うだけで、機能差はありません。
| 項目 | Excel | Googleスプレッドシート |
|---|---|---|
| 構文 | =SIGN(数値) | =SIGN(値) |
| 動作 | 符号を判定する | 符号を判定する |
| 正の数 | 1 | 1 |
| 負の数 | -1 | -1 |
| ゼロ | 0 | 0 |
| 空白セル | 0 | 0 |
| 文字列 | #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で書けないか?」と発想を切り替えるだけで、数式の見通しがグッと良くなりますよ。
