[VBA] ユーザー定義関数の引数を省略できるようにします

ユーザー定義関数の引数を省略できるようにします

 ワークシート関数 (Excel関数) では 引数の一部を省略できる 場合がありますね。
 たとえば RANK.EQ関数は

=RANK.EQ(数値,範囲,[順序])

という形で入力すると、指定した「範囲」の中で「数値」が何番目にあるかを返してくれますけど、[] で囲われた3つめの引数は省略できることになっています。もしここに何も指定しなければ、指定した数値が「大きいほうから何番目か」を返します。0 以外の数値を指定すると「小さいほうから何番目か」を返すようになっています。このように定義することで、1つの関数で色々な処理ができるようにしてあるのです。もちろん VBA で自作するユーザー定義関数 (Function Macro) においても、これと同じことができるようになっています。

CUTE関数

 それでは実際に引数が省略可能な簡単なマクロを作ってみますよー。

 Function CUTE(Optional wd As String = "こばとちゃん") As String

  CUTE = wd & "は世界一かわいい女の子です"

 End Function

 名づけて CUTE関数 ねー。さっそく使ってみましょー。
 まずは引数を何も指定しないで、シートの適当なセルに

=CUTE()

と入力してくださいなー。すると ......

こばとちゃんは世界一かわいい女の子です

と表示されますよー。いい関数ねー。でも引数にたとえば「小春ちゃん」と指定して

=CUTE("小春ちゃん")

と入力すると ......

小春ちゃんは世界一かわいい女の子です

という実につまらない文章が出力されてしまうのです。

 え? 今まで真面目に VBA を勉強してきたけど、こんなくだらない関数は初めて見た? ...... まあとにかく、ポイントはマクロの最初の行にある

Optional wd As String = "こばとちゃん"

という部分です。wd は変数名で、Optional を添えて「これは省略可能ですよ」てことを決めています。そのあとに続く As String で文字列型変数であることを宣言し、"=" のあとは「もし省略されたら『こばとちゃん』という文字を入れておきますよ」という意味です。一般的に省略可能な引数は

Optional 変数名 As 変数のデータ型 = 省略された場合の値

という形で指定します。

MULTIPLE関数

 このまま終わったら真面目な読者さんに怒られるかもしれないので、真面目な関数も1つだけ載せておきましょー。指定した値を整数倍して返す MULTIPLE関数です。

 Function MULTIPLE(x As Double, Optional n As Integer = 2) As Double

 MULTIPLE = n * x

 End Function

 1つめの引数に指定した値に2つめの引数を掛けた値を返しますよ。
 たとえば適当なセルに

=MULTIPLE(3.6,5)

と入力すると 3.6 を 5 倍して 7.2 という値を返します。ただし2つめの引数は Integer型で宣言してあるので、ここを整数以外で指定しても、勝手に整数に丸めて掛け算します。たとえば

=MULTIPLE(4,3.2)

と指定すると、3.2 を 3 に変えて 4 × 3 を計算して 12 という値を返します。2つめの引数を省略して、たとえば

=MULTIPLE(10)

と入力すると 10 を 2 倍して 20 を返します。このマクロでは引数の部分が

x As Double, Optional n As Integer = 2

となっています。x は倍精度浮動小数点型で指定する省略できない引数です。n は省略可能な整数型引数で「もし何も指定されなければ 2 を入れておきますよ」と決めてあります。ふう。疲れた。説明するだけで息が詰まっちゃうよ。なんだか本当に真面目な関数ねー。BlogCatさんが好きそうな関数ねー。でもここだけの話なんだけどー、BlogCatさんって自分では真面目なつもりらしいけど、別にそうでもないのねー。神経質で物事にこだわりすぎる性格ってだけで、真面目ではないのよねー。そこんとこ勘違いしてるってかんじー ...... ま、いいや。このへんでやめとこうっと。こばと、人のうわさ話とかするの好きじゃないしー。な、なんですか、その呆れたような顔は? ≫ VBA の技術

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)