Excel VBA 数学教室ではアフィリエイトプログラムを利用して商品を紹介しています。

【Excel VBA】絶対値を計算する

$x$ を実数とするとき、$x$ から正負の符号を取り去った値を $x$ の絶対値と定義し、$|x|$ と書きます。 $|\,|$ を絶対値記号とよびます。言い換えると、$|x|$ は $x$ が正のときは値をそのまま返し、$x$ が負のときには $x$ を正の値に変える関数です:
 \[|x| = \begin{cases}x & (x \geq 0)\\-x & (x \lt 0)\end{cases}\tag{1}\]
たとえば、$x=-5$ のとき、$x$ の絶対値は $|-5|=5$ となります。$x=5$ のときは絶対値をとっても元の値を変えません ($|5|=5$)。

$x$ が複素数のときは、絶対値は拡張定義されます(虚数単位 $i$ の絶対値は $|i|=i$ ではありません!)。$x=a+bi$ で表したとき、$x$ の絶対値は
 \[|x|=\sqrt{a^2+b^2}\tag{2}\]
として定義されます。この定義にしたがうと、虚数単位は $i=0+1i$ なので、$a=0,\ b=1$ として、
 \[|i|=\sqrt{0^2+1^2}=1\tag{3}\]
となります。同様の計算で $|-i|=1$ であることもわかります。

この記事では、Exel の ABS や VBA の Abs 関数で絶対値を計算する方法について解説します。 

【Excel】ABS関数で絶対値を計算する

ExcelABS 関数は引数の絶対値を返します。たとえば、適当なセルに

=ABS(-35)

と入力すると、-35 の絶対値 35 を返します。ただし、引数に複素数を渡すことはできません。複素数の絶対値を計算する場合は IMABS 関数 を使ってください (≫ IMABS 関数の使い方は、こちらの記事で説明しています

ABS関数を使って、$\sin x$ の絶対値、$y=|\sin x|$ のグラフをワークシートに表示してみましょう。下図を参照にデータを作成してください。

Excelのワークシートにy=abs(sinx)のデータ作成

変数 x の刻み幅は $\Delta x=\pi/32$ とします。セル G4 に

=PI()/32

と入力します。x のマイナス側の端点は $2\pi$ とします。セル C5 には

2*PI()

と入力してください。セル C6 には $2\pi$ に刻み幅を $\delta x$ を加えた値を入れます。セル G4 を相対参照して

=C5+$G$4

と入力します。あとはオートフィルで x が 6.283 … になるまでデータを埋めてください。C 列と D 列のデータを使って散布図を作成すると次のようなグラフが表示されます。

Excel sinx の絶対値のグラフ

【VBA】Abs関数で絶対値を計算する

VBA の Abs() は引数の 絶対値 を返します。戻り値は引数と同じ型になります。Abs は絶対値を意味する Absolute Value の略です。

以下のコードは InputBox に任意の数値を入力して、その絶対値を返すマクロです。

'[VBA] Absolute Value

'InputBoxに入力された数値の絶対値を返すプロシージャ
Sub Absolute()
  Dim x As Double, a As Double
  x = InputBox("数値を入力してください")
  a = Abs(x)
  MsgBox (a)
End Sub

Absolute() を実行すると数値を入力するように促されるます。
たとえば「-10」を入力すると絶対値「10」が返ってきます。

一次関数の絶対値 y = |x| のデータをシートに揃えるマクロを載せておきます。

'[VBA] xとxの絶対値のデータを出力するプロシージャ

Sub Absolute_x()

  Dim i As Double
  i = -8
  Range("A1") = "x"
  Range("B1") = "y=|x|"
  Range("A2").Select

  Do While i <= 8.01
    ActiveCell.Value = i
    ActiveCell.Offset(, 1).Value = Abs(i)
    ActiveCell.Offset(1).Select
    i = i + 0.2
  Loop

End Sub

Absolute_x() によって得られたデータを使うと、次のような絶対値付一次関数のグラフを描けます。

VBA絶対値

エクセルや数学に関するコメントをお寄せください