ユーザー定義関数

中級VBA

ワークシート関数を作れるユーザー定義関数

 Excelでは、ワークシートのセルの内部に =SUM(A1:A10) などとすると、関数(マクロ)の結果がそのセルに反映されますが、このようなワークシート関数をユーザが定義して作ることができます。

 このような関数の定義は、Function関数を使う事で実現できます。(Subは値を返しませんから駄目ですね。)

 ユーザー定義関数は、普通にModule上に記述しておくとワークシートのセル内部で使用できるようになります。

実際にコードを書いて試してみる

 では実験してみます。以下のコードをModule1に書いて、ワークシート上のセルに書き込んでみます。

Function JoinRangeStr(r1 As Range, r2 As Range) As String
     JoinRangeStr = CStr(r1) & CStr(r2)
End Function

 プログラムの内容は、「2つのセルの値を文字列として読み込んで足す」というものです。

 Function関数では、引数戻り値(返り値)がありますが、=関数名(引数)として入力すると、戻り値がセルの値として反映されるわけです。

 早速、セルに書き込んで試してみましょう。

 ちゃんと候補として登録されていますね。

 ちゃんと実行されているようです。
ただ、例外もあってユーザー定義関数として定義できないケースもあります。

  • セルの挿入や削除
  • 他のセル値の変更
  • アクティブセルや選択範囲の変更
  • シートの挿入、削除や名前の変更
  • Excel自体の設定変更

 これらの処理は、セルに埋め込むマクロとしては無理がありますね。
 制限はあるものの、セルに直接書けるという利点を活かせばアイデア次第で利用価値は高いのではないでしょうか。

 

コメント

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