関数を自分で作る?【 Functionプロシージャの使い方とは 】

Left Caption

豆父ちゃん

自分で関数が作れるFunctionプロシージャってなに?どうやって使うの?

こんな疑問にお答えします。

この記事ではFunctionプロシージャ処理動作が似ているCallと比較して使い方や特徴を紹介しています。

FunctionやCallはとても便利な機能なので、使いこなせるようになればVBAでさらにいろんな処理が出来るようになるので、しっかり使いこなせるようになりましょう。

 

Functionプロシージャとは

Functionは自分で作ったプログラムをあたかも登録されている関数のように使えるようになるというもの

どのようにしてFunctionを使うかというと、Functionプロシージャ内のプログラムを実行し、処理結果の値をプログラム内もしくは結果として使用します。

※処理結果の値を戻り値といいます

注意点として戻り値は変数オブジェクトとして使用します。

Right Caption

豆父ちゃん

言葉で表現するとやはり難しく感じていしまう。。。

Functionはいつくかの例を見比べて、そして自分でいろんなプログラムを作ってみるとすぐに覚えることができます。

 

FunctionとCallの違い

・Callは戻り値を指定できない

Callは Sub〇〇() ~ End Subの処理結果を取得

・Functionは戻り値を指定することができる

Functionは Function〇〇() ~ End Function の〇〇を変数として取得

Left Caption

豆父ちゃん

戻り値を指定できるということはどういうことなのか。。

簡単な例で説明

1 Function mamemame() As String
2 mamemame="マメマメ父ちゃん"
3 End Function

mamemameが変数として使えるようになります

1 Sub テスト()
2 MsgBox"mamemame"
3 End Sub

結果は「マメマメ父ちゃん」が表示されます。

 

Functionの使い方

Subプロシージャで変数として使う

1 Function mamemame() As String
2 mamemame="マメマメ父ちゃん"
3 End Function
1 Sub テスト()
2 MsgBox"mamemame"
3 End Sub

 

先ほど紹介した例と全く同じです。

これはSubプロシージャで変数として使用しています。

 

SubプロシージャでCallで呼び出して使う

1 Function mamemame() As String
2 mamemame="マメマメ父ちゃん"
3 End Function
1 Sub テスト()
2 Call mamemame
3 MsgBox"mamemame"
4 End Sub

Callを使ってFunctionプロシージャを呼び出すことも可能です。

 

セルで呼び出して使う

1 Function gou(i As Long , j As Long , k As Long) As String
2 banana = i * j + i * j * (k * 0.01)
3 gou = banana
4 End Function

 

Functionプロシージャにプログラムを作った後、セルから呼び出す

 

セルには

= プロシージャ名( 引数 , 引数 , 引数, )

を入力

 

サンプルを使ってFunctionとCallの違いをわかりやすく説明

サンプル1 合計に金額のみを表示する

 

標準モジュールにプログラムを記載

 

 

結果

 

Functionを使った場合と、Callを使った場合で同じ結果を得ることが出来ました。

 

Left Caption

豆父ちゃん

使い分ける必要がないのでは。。

サンプル1のようなときは使い分ける必要がないので使いやすい方を使いましょう。

 

サンプル2 合計に「合計金額は〇〇」と表示する

標準モジュールにプログラムを記載

 

結果

 

 

簡単な例なのでFunctionを使った場合Callを使った場合で同じ結果にすることができました。

 

注目すべきはCallのプログラムです。

1 Sub Call テスト()
2 Call テスト
3 Range(“E7″)="合計金額は" & Range(“E7")
4 End Sub

 

2行目で処理結果をE7セルに入力し、そのあとに「合計金額は」というテキストを追加しています。

一手間加わっているのでキレイなプログラムとは言えません。。これが、FunctionとCallの最大の違いではないでしょうか。

 

テキストの半角・全角を変換するVBAを紹介している記事の中では主にFunctionプロシージャを使ってVBAを作っています。

私の職場で実際に使っているVBAにも導入しています。テキストの半角・全角の操作を自動化したいという方は合わせてチェックしてみて下さい。

 

FunctionとCallを扱えるとより複雑なVBAが開発可能に!

VBAの中でわかりにくい機能の一つがFunctionプロシージャではないでしょうか。私はFunctionとCallの違いをなかなか理解できず、Functionを避けていた時期があります。個人的にCallの方が直感でわかりやすいし使いやすい気がします。

しかしFunctionプロシージャをしっかり使いこなせるようになればVBAで作れるプログラムのレベルが一段階あがります。より複雑なプログラムを作れるということは、今まで以上に作業の効率化に繋がるVBAを作れるということです。

変数や宣言、戻り値など専門的な用語が多く理解しずらいかと思いますが、使いこなせるようにしておきましょう。