Function プロシージャ

前回から 「まとまった機能をもったプログラムの構成要素」として プロシージャを学んでいる。
プロシージャは他のプログラミング言語では「関数」と呼ばれることもある。
今回はプロシージャの「関数」としての側面を学んでみよう。

前回、プロシージャには「Sub プロシージャ」と「Function プロシージャ」があることに触れたが、
プロシージャを関数として用いるには Function プロシージャを用いる。

数学的関数の取扱い

今回はプロシージャの「関数」としての側面、すなわち Function プロシージャについて学ぶ。

Function プロシージャについて学ぶ前に、VBA における数学的関数の取扱いについて簡単に解説しよう。

以下のプログラムを記述してみよう。 (Visual Basic Editor の起動方法は「第一回:プログラムを書き始めるまでの準備」参照)

これは、cos(π/6) とsin(π/6) の値を表示するプログラムである。



結果は以下のようになる。 cos(π/6)=√3/2〜0.866, sin(π/6)=1/2 = 0.5 であることに注意。
(0.5 が 0.499... となるのは、プログラム中で π= 3.1415 という「粗い近似」を用いているからである。



ここで、

x = Cos(theta)


という行に注目すると、Cos という関数は、theta という値を受取り、返す値 Cos(theta) を持っていることがわかる。

関数が受け取る値は前回学んだように「引数 (ひきすう)」と呼ばれ、 関数が返す値は「戻り値」と呼ばれる。

Cos に関する上の説明を「引数」「戻り値」という用語を用いて書き直すと以下のようになる。 このように、戻り値を持つ関数を VBA で記述するには 以下で学ぶ Function プロシージャを用いる。

なお、 VBA で使える数学的関数で代表的なものをまとめると以下のようになる。

意味 記法 注意
cos x Cos(x) x はラジアンである。
sin x Sin(x) x はラジアンである。
tan x Tan(x) x はラジアンである。
arctan x Atn(x) tan x の逆関数 (アークタンジェント)。ラジアンの角度 (-π/2〜π/2) が返る。
x y x ^ y x の y 乗。「 ^ 」は関数ではなく演算子であるが、これまで取り上げなかったのでここで紹介する。
ex Exp(x) exponential の頭文字。
log e x Log(x) -
√x Sqr(x) Square Root の略
|x| Abs(x) 絶対値。Absolute Value の略。

なお、Excel ではπとして関数 PI() が使えるが、
VBA ではπ自体を求める関数がないので、「4*Atn(1)」でπを代用することが多い。

なお、Atn は tan の逆関数 (arctan) である。tan(π/4) = 1 を逆関数を用いて表すと、π/4 = arctan(1) となるので、
π = 4 arctan(1) となる、というわけである。(なお、π/4 は 45 度であることに注意)



数学的関数を Function プロシージャで実装する

ここまででわかったように、Function プロシージャは戻り値を持つことが特徴である。

簡単な例として、y=x2 を計算する関数、すなわち を記述してみよう。(sq という名前はは自乗 = square の意味でつけた)
記述例は以下のようになる。実行すると、2 の 2 乗 (=4) が表示される。



一般的に書くと、Function プロシージャの記述法は以下のようになる。
比較のために Sub プロシージャの記法も挙げ、相違点を赤で示す。

定義 利用法
Function プロシージャ
Function 名前 (引数リスト) As 型名前 = 処理内容
	…
End Function
x = 関数名(引数リスト)
Sub プロシージャ
Sub 名前 (引数リスト)
	…
	処理内容
	…
End Sub
関数名 引数リスト 


定義においてのポイントは、 また、利用法でのポイントは である。

今まで学んだ If 文や For 文を用いて、より複雑な関数を Function プロシージャを用いて作成できる。
例えば、 関数は以下のようになる。



なお、この関数のグラフは以下の様になる。







←引数のある Sub プロシージャ引数の内容を変更するプロシージャ→

Excel / OpenOffice で学ぶ Visual Basic for Applications (VBA)に戻る