2012年12月22日土曜日

[ExcelVBA] ワークシート関数を増やす


アドベントカレンダー 22日目

マクロばかりに目がいくとどうも忘れがちになるというか
こういう使い方をしたい時がないからなのか登場場面が少ないきがしますが
マクロに書いたPublicなFunctionはワークシート関数から使えますよね。

例) BMIを求める関数を実装する
BMIの式は
BMI = 体重 ÷ 身長 ÷ 身長 ですね
Option Explicit

Function BMI(ByVal Height As Double, ByVal Weight As Double) As Double

    BMI = Weight / Height ^ 2

End Function

これでワークシート内で=BMI(1.7, 60)の
ように記載すると値が返ってきます。

何かしらの公式など、関数化してワークシート内で使いまわすなんてやり方は便利よいですね。
自分の場合、力学系の式を登録して、簡易的なチェックとして使っていたりしましたね。

もちろん、関数の挿入[fx]で確認してみても他の関数と同様に示されます。


ただ・・・
説明がないといまいちそっけないですね。

とういうわけで、ヘルプを追加してみます。
Option Explicit

Function BMI(ByVal Height As Double, ByVal Weight As Double) As Double

    BMI = Weight / Height ^ 2

End Function


Sub OwnFunctionHelp()

    Application.MacroOptions Macro:="BMI", _
    Description:="引数は以下の通りです。" & vbLf & "Height:身長[m], Weight:体重[kg]"

End Sub
OwnFunctionHelpを実行すると説明が表示されるようになります。



あくまでもマクロを実行することで追加されるのでExcelが開いたら実行されるようにしておく必要があります。
標準モジュールならAuto_Open関数を作りそこから呼び出すようにするか
ThisWorkbookならWorkbook_Open関数から呼び出すようにする必要があります。

0 件のコメント: