関数

セルA4に=SUM(A1:A3)と設定すると、セルのA1、A2、A3に入っている値の合計がA4に入ります。このようにExcelに組み込まれている関数をワークシート関数と言います。VBAはVBAで、組み込み関数を持っています。ワークシート関数とVBAの組み込み関数は、両方にあるものもあれば、片方にしかないものもあります。

VBAでは、組み込み関数とは別に、関数を作成することが出来ます。関数もマクロと同じようにモジュールシートに作成します。

モジュールシートを、メニューの[挿入]-[マクロ]-[モジュール]でワークブックに追加してください。

では、摂氏を華氏に変換する関数を作ってみましょう。

(華氏)=(摂氏)× 9 ÷ 5 + 32

これを関数にVBAの関数にすると

Function CtoF(c As Variant) As Variant
    CtoF = c * 9 / 5 + 32
End Function

となります。なんとなくわかりますよね。

内容を説明する前に、使ってみましょう。シートから使う場合は、次のようになります。

ここでは、=CtoF(A2)のようにセルを指定していますが、=CtoF(0)のように値を直接していしてもかまいません。

では、関数の本体の方を見てみましょう。

FunctionEnd Functionの間が関数の本体となります。

最初の1行は、関数の宣言です。

Function CtoF ( c As Variant ) As Variant
関数名 引数の変数名 引数の型 関数の返却する値の型

■関数名(プロシージャ名、ファンクション名)

関数名には、マクロ名と同じく英数字、漢字、カタカナ、ひらがな、アンダースコア(_)が使えますが、先頭の文字には、数字とアンダースコア(_)は使えません。

■引数(パラメータ)

関数名に続く()の間の定義が引数の定義です。セルで=CtoF(5)とした時には、引数である変数c(変数は値を入れておく入れ物です。)に5が入った状態で関数が動作します。引数は、カンマ(,)で区切って複数定義することが出来ます。また、引数のない関数も作成できます。

■引数の型

c As VariantのAs Variantは、変数cが、どのような形式の値を入れることが出来るかを指定しているものです。例えば、c As Integerとすると変数cは、整数のみ入れられる変数となり、c As Stringとすると文字列のみ設定できます。Variantは、何でも型で、どんな形式のものでも入る便利な型です。便利なのですが、型をきっちり指定した場合と比べて、Variant型は処理が遅くなるというデメリットがあります。
関数CtoFでは、=CtoF(A2)のようにセルが指定される場合と=CtoF(5)のように数値が指定される場合があるのでVariant型にしています。なお、Function CtoF(c )のようにAs 型を省略した場合はVariant型の変数となります。

■関数の返却する値の型

CtoFは、数値しか返さないので、ここはAs Doubleのように浮動小数点型の型を指定してもOKです。返却する値の型を省略した場合はVariantになります。

■ロジック

FunctionとEnd Functionの間に挟まれた部分が本体部分で、ロジックともいいます。
ここでは、引数で摂氏をもらって華氏を計算して、華氏を関数の返却値として返します。返却値は、関数名に設定した値が返却されます。

    CtoF = c * 9 / 5 + 32

引数c×9÷5+32の計算結果をCtoFに入れているのが、この1行です。

えっ関数化しなくても=A2*9/5+32とセルに設定すればいいって?・・・・・ごもっとも



戻る