Excel VBAでFunctionかSubで定義してマクロを使いたいときはないでしょうか。
けど、そんな中で悩むことは、
・VBAのFunctionとSubの使い分け方がわからない
ですよね。
今回はそんなお悩みを解決する
・VBAのFunctionとSubの使い分け方
についてまとめます!
もくじ
VBAをまとめる方法は2種類
VBAをまとめる方法は2種類あります。それはFunctionとSubで、それぞれ、Functionプロシージャ、Subプロシージャと呼んでいます。
プロシージャとはVBAの機能の最小単位を意味します。
Functionプロシージャ、Subプロシージャの書式と詳細については以下の通りです。
書式 | 説明 |
---|---|
Function <プロシージャ名>(<受け取る値>) As <返すデータ型> ・・・ End Function |
命令の実行結果を呼び出し元に返します。 ワークシート関数として使用可能です。 |
Sub <プロシージャ名>(<受け取る値>) ・・・ End Sub |
命令を実行します。戻り値はありません。またワークシート関数としては使用できません。 |
FunctionとSubの違い
次にFunctionとSubの違いについて説明をします。
FunctionプロシージャとSubプロシージャの違いは、
・ワークシート関数として使えるか
・マクロから実行が可能か
の3点になります。
それぞれの違いをみてみましょう。
戻り値があるか
Functionプロシージャは戻り値がありますが、Subプロシージャは戻り値がありません。
ワークシート関数として使えるか
FunctionプロシージャはVBAの関数の他にSUM関数のようにワークシート関数としても使用できます。一方でSubプロシージャはワークシート関数としては使えません。
マクロから実行が可能か
Subプロシージャはマクロとして登録され、マクロから実行が可能になります。
Functionプロシージャはマクロからの実行やボタンのマクロ登録ができませんが、Subプロシージャはマクロからの実行やボタンのマクロ登録ができます。
FunctionとSubを使い分ける基準
FunctionプロシージャとSubプロシージャを使い分ける基準について説明をします。
Functionはオリジナルの計算処理をまとめる時に使用
Functionはオリジナルの計算処理をまとめる時に選択します。
例えばころころ変わる税率を計算したり、業務独自の計算を処理したいときなどです。
以下サンプルコードです。
Function ADDNUM(rCell As Range) As String
ADDNUM = rCell.Value + 50
End Function
引数の値に50を加算した結果が返るFunctionプロシージャになります。
適当な数値をA列に入力し、
「=ADDNUM(A1)」をB2のセルへ挿入し、5行目までドラッグすると、
=ADDNUM(A1)
A列の数値に50が加算された結果が隣のB列に表示されたことが確認できました!
サンプルコードの詳細は以下の記事にまとめていますので、こちらもご覧ください。
Subはマクロから実行したい時に使用
Subプロシージャはマクロから実行したい時に使用します。
マクロは単体、もしくは複数の機能をまとめたものなので、Functionプロシージャの計算結果から表データに反映したり、シートを作成したりすることが想定されます。
サンプルコードは上記FunctionプロシージャをSubプロシージャから呼び出し、セルA1の値をADDNUM関数に指定し、+50の結果をデバッグ出力するものです。
Sub ADDNUMを呼び出す()
Debug.Print ADDNUM(Range("A1"))
End Sub
アクティブシートのA1に適当な数字をいれて実行すると、
+50の結果が出力されました。
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・VBAのFunctionとSubの使い分け方
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す