VBAでよく使われる「Subプロシージャ」と「関数(Function)」。
どちらも処理のまとまりを表しますが、使い方や目的に明確な違いがあります。
本記事では、両者の違いや使い分け方に加えて、関数の書き方についても詳しく解説します。
目次
1. Subプロシージャとは?
**Subプロシージャ(Sub)**は、処理を実行するためのコードのかたまりです。
処理の結果を返すことはなく、単純に「やるべきことを実行する」ために使います。
Subプロシージャの基本形
Sub SampleSub()
MsgBox "こんにちは!"
End Sub
このように定義されたSubは、呼び出せばその処理を実行します。
2. 関数(Function)とは?
**関数(Function)**は、処理を行い、その結果を「戻り値」として返すことができるプロシージャです。
計算処理や条件判定など、結果を使いたい場面で便利です。
ただし、必ずしも戻り値を使わなければならないわけではありません。
結果を使わず、関数をSubのように扱うことも可能です。
3. 関数の書き方
戻り値のある関数
戻り値のある関数では、関数名に値を代入することで「返す値」を指定します。
Function GetGreeting(name As String) As String
GetGreeting = "こんにちは、" & name & "さん!"
End Function
Function GetGreeting(...) As String
→ 関数名とその戻り値の**データ型(ここではString型)**を指定GetGreeting = ~
→ この代入によって、戻り値が指定される(関数名 = 戻したい値)
戻り値のない関数(使わないケース)
関数として定義しながらも、戻り値を無視して呼び出すことが可能です。
Function ShowMessage()
MsgBox "メッセージを表示するだけの関数"
End Function
このように、戻り値の型を指定しない場合(As 型
を省略)、型は Variant
とみなされます。
戻り値を代入せずに終わることで、事実上Subと同様の動作になります。
4. 呼び出し方法の違いと例
Subプロシージャの呼び出し
Call SampleSub()'Callを使う方法
SampleSub '省略形
関数の呼び出し(戻り値を使用)
Dim message As String
message = GetGreeting("田中")
MsgBox message '「こんにちは、田中さん!」と表示
関数の呼び出し(戻り値を使わない)
Call GetGreeting("山田") '戻り値は捨てられる
関数の戻り値が必要ない場合でも、Call
を使って呼び出せます(ただし戻り値は無視されます)。
5. SubとFunctionの比較表
比較項目 | Subプロシージャ | 関数(Function) |
---|---|---|
処理の目的 | 実行のみ | 実行と結果の返却 |
戻り値 | 返せない | 返せる(使わなくても可) |
定義の書式 | Sub 名() ~ End Sub | Function 名() As 型 ~ End Function |
戻り値の返し方 | ― | 関数名 = 値 で返す |
呼び出し方 | Call Sub名() / Sub名 | 値 = 関数名() / Call 関数名() |
6. まとめ
- Sub は「処理をまとめて実行」するために使い、戻り値は返さない。
- Function は「処理の結果を返す」ことができるが、戻り値を使わなくても動作する。
- 関数の戻り値は、関数名に値を代入して返す。
- 呼び出し時には
Call
でどちらも実行可能だが、関数の戻り値を使わない場合は捨てられる。
関数とSubは、目的に応じて使い分けることでコードの可読性や再利用性が高まります。
VBAを効率よく扱うためにも、この違いをしっかり理解しておきましょう。
コメント