0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事ではAbs関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。

Abs関数の使い方と注意点

Abs関数は、数値の絶対値(0 からの距離)を返す関数です。
正の数はそのまま、負の数は符号を取り除いて返します。

構文

Abs(数値)
  • 数値 : 絶対値を返したい数値または式
  • 戻り値 : 数値の絶対値

使用例

こちらの例では10, -5, 0という数値に対し、Abs関数を実行しています。

Sub Sample()
    Debug.Print "Abs(10) : " & Abs(10)
    Debug.Print "Abs(-5) : " & Abs(-5)
    Debug.Print "Abs(0) : " & Abs(0)
End Sub

▶ 出力結果

Abs(10) : 10
Abs(-5) : 5
Abs(0) : 0

各数値の絶対値(0からの距離)が戻り値となっていることが分かります。

⚠️注意

数値がNullの場合は戻り値が"Null"になる。

数値がNullの場合戻り値が"Null"になります。

Sub Sample()
    Debug.Print Abs(Null)
End Sub

▶ 出力結果

Null

IsNull関数等で事前チェックし意図した出力になるようにしましょう。

戻り値の型は引数の型に準じる

戻り値の型は引数の型に応じて変化します。

Sub Sample()
    Dim MyInteger As Integer
    Dim MyDouble As Double
    
    MyInteger = -123
    Debug.Print "Abs(MyInteger) : " & TypeName(Abs(MyInteger))
    
    MyDouble = -456.789
    Debug.Print "Abs(MyDouble) : " & TypeName(Abs(MyDouble))
End Sub

▶ 出力結果

Abs(MyInteger) : Integer
Abs(MyDouble) : Double

一部の型(String型やBoolean型等)に使用した場合は引数と戻り値の型が異なります。
引数の型と戻り値として使用したい型には注意しましょう。

Sub Sample()
    Dim MyString As String
    Dim MyBoolean As Boolean
    
    MyString = -456
    Debug.Print "Abs(MyString) : " & TypeName(Abs(MyString))
    
    MyBoolean = 1
    Debug.Print "Abs(MyBoolean) : " & TypeName(Abs(MyBoolean))
End Sub

▶ 出力結果

Abs(MyString) : Double
Abs(MyBoolean) : Integer

数値(半角または全角)以外はエラーになる

Abs関数の引数に半角または全角の数値以外を指定するとエラーになります。

Sub Sample()
    On Error Resume Next

    Err.Clear
    Debug.Print "半角英字 : " & Abs("Abc")
    If Err.Number <> 0 Then Debug.Print "半角英字 : エラー:" & Err.Description

    Err.Clear
    Debug.Print "全角英字 : " & Abs("Abc")
    If Err.Number <> 0 Then Debug.Print "全角英字 : エラー:" & Err.Description

    Err.Clear
    Debug.Print "ひらがな : " & Abs("あいう")
    If Err.Number <> 0 Then Debug.Print "ひらがな : エラー:" & Err.Description

    Err.Clear
    Debug.Print "漢字 : " & Abs("亜伊宇")
    If Err.Number <> 0 Then Debug.Print "漢字 : エラー:" & Err.Description

    Err.Clear
    Debug.Print "半角記号 : " & Abs("!?#")
    If Err.Number <> 0 Then Debug.Print "半角記号 : エラー:" & Err.Description

    Err.Clear
    Debug.Print "全角記号 : " & Abs("!?#")
    If Err.Number <> 0 Then Debug.Print "全角記号 : エラー:" & Err.Description

    Err.Clear
    Debug.Print "半角数字 : " & Abs("-1.23")
    If Err.Number <> 0 Then Debug.Print "半角数字 : エラー:" & Err.Description

    Err.Clear
    Debug.Print "全角数字 : " & Abs("-1.23")
    If Err.Number <> 0 Then Debug.Print "全角数字 : エラー:" & Err.Description

    Err.Clear
    Debug.Print "スペース : " & "[" & Abs("1. 2 3") & "]"
    If Err.Number <> 0 Then Debug.Print "スペース : エラー:" & Err.Description

    On Error GoTo 0
End Sub

▶ 出力結果

半角英字 : エラー:型が一致しません。
全角英字 : エラー:型が一致しません。
ひらがな : エラー:型が一致しません。
漢字 : エラー:型が一致しません。
半角記号 : エラー:型が一致しません。
全角記号 : エラー:型が一致しません。
半角数字 : 1.23
全角数字 : 1.23
スペース : エラー:型が一致しません。

上記ではエラー発生時にエラーを無視して次の処理を実行するよう記述していますが、
エラーを無視する記述が無い場合、エラー時に処理が止まってしまいます。
引数に渡す内容には注意しましょう。

error.png

その他のVBA関数

【Excel VBA】VBAでよく使う関数一覧&基本の使い方

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?