2024年5月27日月曜日

このプロシージャは、値を返す関数の定義で便利ですが、ワークシート関数も引用できるぜ - Functionプロシージャ(VBAマクロ)

       
VBAでコードを書いていて、今まで見過ごしていた記述を見つけて驚きました。
それは、VBエディターで記述したファンクション関数がシート上で使えるんだ。

使い方は、よく使うシート関数と同じようなもので、値を渡す方法も全く同じ。
例えば、関数が”Hogehoge”で設定しているなら、セル上の記述はとても簡単。

B1セルに”=HogeHoge(B2)”と入力して、関数にB2の値を渡して実行します。
その結果をセル上に出力するのですが、ファンクション関数の記述が面白いな。

"Public Function HogeHoge(rng As Range)"と、標準モジュールに記述する。
この後、シートのセル上に記入したらちゃんと計算結果が反映されて来ました。

   Public Function HogeHoge(rng As Range) 'Module1に記述
     HogeHoge = rng * rng * 3.14
   End Function '円の面積の計算

      
これって、プロシージャで値渡しのコールをするのと同じ要領と分かりました。
()内に(ByVal rng As Range)と書くのと似てますが、ByValは書きません。

これは、直接に示したRangeの値が渡され、そのセル上で結果を出すからかな。
違いは、その程度ぐらいですが、この関数をブックに保存する時は要注意です。

マクロ付きファイルの拡張子”xslm”か、”xlbs”で保存しなければならないわけ。
要するに、シート上に実行結果を直接書き出すか否かの差でしかない感じだな。

もちろん、出力結果のセルをダブルクリックすると関数と値セルが表示される。
というわけで、正にワークシート関数の働きとそっくりだったと言う感じです。

使い道としては、用例の通り数学公式のコードを書いてみるのも良いでしょう。
面積とか体積もいいし、単位の変換、電気抵抗の計算にも使えるんじゃないか。

本当は、住所から郵便番号を検索するプログラムを探していて、発見しました。
住所を入力したセルの左隣に、郵便番号を拾い出す関数を偲ばせておく分けね。

郵政公社のHPから参照データをダウンロードしながら検索する手間暇はあるな。
でも、ネットで探せばサンプルのコードが簡単に見つかるので、是非、自分なりに使いやすく改変したコードを作り上げてもらいたいと思ったのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿