Excel VBAの「Sgn 関数」について解説します。
Sgn 関数とは
Excel VBA の Sgn 関数は、数値の符号を判定しその結果を符号を示す値で返します。
VBAで「数値がプラスかマイナスか、それともゼロか」を判定したいときに使うのが Sgn 関数です。
この関数を使わずに判定を行う場合多くの場合は「 If n > 0 Then … 」と複数の条件分岐を書くことになります。しかし、 Sgn 関数を使えばたった1行で符号を判定することができます。
Sgn 関数の構文や実際の使い方について解説します。
Sgn 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
Sgn(number)
※ Sgn は「Sign(符号)」の略です。
引数
| 指定項目 | 説明 |
|---|---|
| number | 【必須】任意の有効な数値(式)を指定します |
※ number の値が数値以外の場合は、型が一致しません(実行時エラー ’13’)が発生します。
※ number の値が Null の場合は、Null を返します。
戻り値
戻り値は次表のとおりです。
| number の値 | Sgn の戻り値 |
|---|---|
| 0 より大きい(正の数) | 1 |
| 0 に等しい(ゼロ) | 0 |
| 0 より小さい(負の数) | -1 |
戻り値のデータ型は Integer です。
解説(使用例)
ここからは、サンプルを使って使用例や注意点などについて解説します。
Sgn 関数の基本的な使い方
Sgn(x) の動作は次のように値の「方向」だけを判定する図解イメージです。
↑
1 | x > 0
------+----------→
0 | x = 0
------+----------
-1 | x < 0
基本的な Sgn 関数の使用例
InputBox に入力した値を判定します。Sng 関数の動きを確認しましょう。
'■Sgn関数サンプル1(入力値を判定する)
Sub Sgn_Sample_01()
Dim num As Variant
num = InputBox("数値を入力して下さい")
If IsNumeric(num) Then
MsgBox "Sgn(" & num & ") = " & Sgn(num)
Else
'数値以外が入力された場合の処理
MsgBox num & ":数値以外が入力されました!"
End If
End SubIsNumeric 関数で入力値が数値かどうか判定して処理を分岐しています。
InputBox の入力値が数値だった場合次のような判定結果のメッセージが表示されます。

InputBox に数値以外が入力された場合に表示されるメッセージがこちらです。

e の 1.5 乗 が Exp 関数で計算され、表示されました。
IsNumeric 関数で数値判定せず数値以外が引き当てられた場合、次のエラーメッセージが表示されます。

Select Case で条件分岐する例
Sgn 関数の戻り値は3つだけなので、If 文より Select Case を使った方が良いでしょう。
'■Sgn関数サンプル2(Select Caseで条件分岐)
Sub Sgn_Sample_02()
Dim num As Double
Dim res As String
num = InputBox("数値を入力して下さい")
'数値が入力されたか判定
If Not IsNumeric(num) Then num = 2
'入力値を判定して条件分岐
Select Case Sgn(num)
Case 1
res = "入力値 " & num & " は「正」です。"
Case 0
res = "入力値 " & num & " は「ゼロ」です。"
Case -1
res = "入力値 " & num & " は「負」です。"
Case Else
res = num & ":数値以外が入力されました!"
End Select
MsgBox res '結果をMsgBoxで表示する
End Sub
If 文を使うケース
Sgn 関数で単一の条件を除外したい場合などには IF 文による分岐が有効です。
'■Sgn関数サンプル3(If文による条件分岐)
Sub Exp_Sample_03()
Dim num As Double
num = -50
'Sgn関数で 正・負・ゼロ を管理
Dim result As Integer
result = Sgn(num)
If result = -1 Then
Debug.Print "マイナス値のため処理を中止します。"
Exit Sub
End If
'以降、正またはゼロの場合の処理
End Sub数値がマイナスだった場合に処理を分岐(中止)させる例です。
まとめ
VBA の Sgn 関数は、値が「正」「負」「ゼロ」を判定する関数です。
Sgn(値)が 1 ならば「正=プラス」 -1 ならば「負=マイナス」 0 ならば「ゼロ」です。
値の桁数などは関係ありません。
Sgn 関数は次のようなケースで使います。
- 差額の増減判定
- 方向制御
- プラスマイナスの分岐
- 数値の符号抽出
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!

