PR

Excel VBAのAbs関数とは?絶対値を取得する方法と実務で使える活用例を解説

VBAのAbs関数 Excel
スポンサーリンク

はじめに

Excel VBAで数値を扱っていると、「プラスかマイナスかではなく、差の大きさだけを知りたい」という場面があります。たとえば、計画値100に対して実績値が90でも110でも、差の大きさはどちらも10です。

このようなときに使えるのが、VBAのAbs関数です。Absは数値の符号を外し、0からの距離である絶対値を返します。

この記事では、Abs関数の構文と基本的な使い方に加え、2つの値の差、許容差判定、セル値を扱うときの注意点を解説します。読了後には、「符号を無視して大きさだけを比較したい処理」でAbsを使える状態を目指します。

Abs関数とは

Abs関数は、指定した数値の絶対値を返すVBAの標準関数です。

入力Absの結果
55
-55
00
-12.512.5

負の値を正の値へ変換する関数と覚えやすいですが、本質は「符号を取り除いて値の大きさを得る」ことです。正の値を指定した場合は、そのまま同じ値が返ります。

基本構文は次のとおりです。

Abs(number)

numberには数値として評価できる式を指定します。

Dim result As Double

result = Abs(-12.5)

MsgBox result

実行すると、12.5が表示されます。

2つの値の差を求めるときに便利

Absが特に分かりやすく役立つのが、2つの値の差の大きさを求める処理です。

たとえば、システム上の在庫数が120、実棚数が115の場合を考えます。

Dim systemStock As Long
Dim actualStock As Long
Dim difference As Long

systemStock = 120
actualStock = 115

difference = Abs(systemStock - actualStock)

結果は5です。

実棚数が125の場合でも、

difference = Abs(120 - 125)

の結果は同じく5です。

systemStock - actualStockだけでは、どちらが大きいかによって正負が変わります。Absを使えば、増減の方向ではなく「いくつ違うか」だけを同じ方法で比較できます。

許容差の判定にも使える

実務では、完全一致ではなく「基準値との差が一定範囲なら許容する」と判定したいことがあります。

たとえば、基準値との差が10以内なら正常とする場合は、次のように書けます。

Dim target As Double
Dim actual As Double
Dim tolerance As Double

target = 100
actual = 108
tolerance = 10

If Abs(actual - target) <= tolerance Then
    MsgBox "許容範囲内です"
Else
    MsgBox "確認が必要です"
End If

actualが92でも108でも、基準値100との差は8なので同じ条件で判定できます。

条件分岐そのものを確認したい場合は、VBA IF Then Elseの基礎:使用例を交えて解説も参考にしてください。

セルの値を渡すときは数値か確認する

Absの引数には数値として扱える値が必要です。セルから取得した値をそのまま渡す場合、文字列などが入っていると意図しないエラーにつながります。

簡単な入力確認にはIsNumericを使えます。

Dim value As Variant

value = Range("A1").Value

If IsNumeric(value) Then
    MsgBox Abs(value)
Else
    MsgBox "数値を入力してください"
End If

ただし、IsNumeric("53")のような数値として解釈できる文字列もTrueになります。文字列を数値として扱ってよいかどうかは、データの意味に合わせて判断してください。

データ型や変換を整理したい場合は、Excelで四則演算とデータ型変換を解説!計算ミスを防ぐコツへ分けて確認できます。

Nullや未初期化の値ではどうなるか

VBAのAbsには、通常の正負の数値以外にも決まった動作があります。

入力の状態結果
数値同じ型の絶対値
NullNull
未初期化の変数0

たとえば、Variant変数にNullが入っている場合、Absを通してもNullのままです。

Dim value As Variant

value = Null
Debug.Print IsNull(Abs(value))

この結果はTrueです。

Nullは0や空文字とは別の値です。欠損値の有無そのものを判定したい場合は、Absの前にIsNullなどで確認します。

符号に意味があるときはAbsを使わない

Absは、符号を無視して大きさだけを比較したい場合に便利です。一方で、符号自体に意味があるデータへ機械的に使うと、必要な情報を失います。

たとえば、売上前年差が-100万円なら「100万円減少した」という意味があります。これにAbsを使うと100になり、「減少」という情報が消えます。

そのため、次のように考えると使い分けやすくなります。

  • 誤差や差異の大きさを知りたい → Absを使う
  • 増加か減少かという方向も必要 → 符号を残す
  • 大きさと方向の両方が必要 → 元の値とAbsの結果を別々に扱う

VBAではAbsをそのまま使えばよい

Excel VBAでは、AbsはVBAに組み込まれた関数なので、通常はAbs(...)と直接書けば十分です。

Excelのワークシート関数をVBAから呼び出す場合にはWorksheetFunctionオブジェクトを使うことがありますが、VBAにも同名または同等の関数がある場合は、まずVBA側の関数を使う方が処理の意図を読み取りやすくなります。

Absで単純な数値の絶対値を求める処理では、ワークシート関数を経由する必要はありません。

まとめ

VBAのAbs関数は、数値の符号を外して絶対値、つまり0からの距離を取得するための関数です。

単純に負数を正数へ変換するだけでなく、Abs(a - b)と書くことで2つの値の差の大きさを求めたり、Abs(actual - target) <= toleranceのように許容差を判定したりできます。

一方で、符号に増減などの意味があるデータでは、Absを使うと方向の情報が失われます。また、セル値を扱う場合は入力値が数値として評価できるか、Nullなどの欠損値をどう扱うかも確認が必要です。

「方向は不要で、大きさだけを比較したいか」を基準にすると、Absを使う場面を判断しやすくなります。

関連記事


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