VBA Sgn 関数 指定した数値の符号を示す値を返します

【VBA Sgn関数】数値の符号を判定する方法

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 Sub

IsNumeric 関数で入力値が数値かどうか判定して処理を分岐しています。

InputBox の入力値が数値だった場合次のような判定結果のメッセージが表示されます。

Sgn関数サンプル1の結果画像

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

Sgn関数で数値以外だった場合の結果画像

e の 1.5 乗 が Exp 関数で計算され、表示されました。

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

Sgn関数に数値以外を渡した場合のエラー画像

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

入力値が「365」の結果は次のとおりです。

Sgn関数サンプル2の結果画像

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サンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!

よかったらシェアしてね!
  • URLをコピーしました!
目次