[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関数で絶対値を計算する

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

=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絶対値

コメント