関数とSubプロシージャの違い

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 SubFunction 名() As 型 ~ End Function
戻り値の返し方関数名 = 値 で返す
呼び出し方Call Sub名() / Sub名値 = 関数名() / Call 関数名()

6. まとめ

  • Sub は「処理をまとめて実行」するために使い、戻り値は返さない。
  • Function は「処理の結果を返す」ことができるが、戻り値を使わなくても動作する
  • 関数の戻り値は、関数名に値を代入して返す
  • 呼び出し時には Call でどちらも実行可能だが、関数の戻り値を使わない場合は捨てられる

関数とSubは、目的に応じて使い分けることでコードの可読性や再利用性が高まります。
VBAを効率よく扱うためにも、この違いをしっかり理解しておきましょう。

コメント

タイトルとURLをコピーしました