[VBA] Log関数

 この記事では VBA による対数計算の方法について解説します。
 ≫ Excelのワークシートで対数を計算する方法ン位ついては、こちらの記事をご覧ください。

[VBA] Log関数

 自然対数は $y=e^x$ の逆関数であり、
 
\[y=\log_{e} x\]
のように表します。一般に添字 $e$ は省略され、
 
\[y=\log x\]
と書きます。ここに $e$ はネイピア数(自然対数の底)で
 
\[e = 2.7182818 …\]
という値をもつ無理数です。

 VBA の Log() は引数の自然対数を返します。
 引数は 0 を超える数値で指定します。
 戻り値はDouble 型(倍精度浮動小数点数型)となります。

 $\log 1=0$ となることを確かめてみましょう。

'[VBA] log(1)=0を確認

Sub Log_Test_1()

  Debug.Print Log(1)

End Sub
0

 定義より、$\log e$ は $1$ となります。
 ネイピア数 $e$ は Exp(1) で取得できます。

'[VBA] log(e)=1を確認

Sub Log_Test_2()

  Debug.Print Log(Exp(1))

End Sub
1

 真数条件より、引数に 0 や負数を渡すとエラーとなります。

'log(0)はエラーを返す

Sub Log_Test_3()

  Debug.Print Log(0)

End Sub
実行時エラー '5'
プロシージャの呼び出し、または引数が不正です。

 

'[VBA] log(-1)はエラーを返す

Sub Log_Test_4()

  Debug.Print Log(-1)

End Sub
実行時エラー '5'
プロシージャの呼び出し、または引数が不正です。

 
 ある数 $a$ を底とする対数値は「底の変換公式」によって求めることができます:
 
\[\log_{a}x=\frac{\log_{e}x}{\log_{e}a}\]
 任意の数値と底を指定して対数を計算する関数を実装してみます。

'[VBA] 任意の底の対数関数

Function Logarithm(x As Double, a As Double)

  Logarithm = Log(x) / Log(a)

End Function

 $\log_{2}256=8$ を確かめてみます。

'[VBA] log_2(256)=8を確認

Sub Test_Logarithm()

  Debug.Print Logarithm(256, 2)

End Sub
8

 

[VBA] 常用対数を計算するLog10関数

 たとえば $x$ の常用対数を得たいときは、底の変換公式を使って、
 
\[\log_{10}x=\frac{\log_{e}x}{\log_{e}10}\]
で計算できます。常用対数を求める Functionプロシージャを定義しておくと便利です。

'[VBA] 常用対数関数

Function Log10(x As Double)

  Log10 = Log(x) / Log(10)

End Function

 $\log_{10}1000=3$ となることを確かめてみます。

'[VBA] 1000の常用対数が3であることを確認

Sub Test_Log10()

  Debug.Print Log10(1000)

End Sub
3

コメント

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