VisualBasic(VB)初心者向け:SubとFunctionの違いを解説

こんにちは!
今回は、VB(Visual Basic)を始めたばかりの方向けに、「Sub」と「Function」の違いについて、分かりやすく解説してみたいと思います。

「プロシージャって何?」「SubとFunctionってどう使い分けるの?」というモヤモヤをスッキリさせたい方は、ぜひ最後まで読んでみてください。


よく聞く「SubとFunctionの違い」ってなんなの?

VBを触っていると、だいたいこんな場面に出くわします。

Public Sub Hello()
    MsgBox("こんにちは!")
End Sub

Public Function Add(a As Integer, b As Integer) As Integer
    Return a + b
End Function

このふたつ、どっちも「何かの処理」をするという点では似ていますが、大きな違いがあるんです。


Subってなに?

Subは「手続き(プロシージャ)」の一種で、値を返さないのが特徴です。

ざっくり言うと:

  • 処理はするけど、結果は返さない
  • メッセージの表示や、ログの記録、ファイルの書き込みなどに使います

具体例:

Public Sub DisplayMessage(message As String)
    MsgBox message
End Sub

このSubは、ただ渡された文字列をメッセージボックスで表示するだけ。
「はい、やりましたー!」って感じで、結果は何も返ってきません。


Functionってなに?

Functionは、値を返すプロシージャです。

ざっくり言うと:

  • 計算とかの結果を返したいときに使う
  • 戻り値を活用できる

具体例:

Public Function AddNumbers(ByVal a As Integer, ByVal b As Integer) As Integer
    AddNumbers = a + b
End Function

これは足し算して結果を返してくれるFunction。
Dim result = AddNumbers(10, 20) って呼び出せば、result には「30」が入ります。


戻り値の書き方には2パターンある

VBでは戻り値の書き方が2つあります。

Return を使う(おすすめ!)

Return a + b

他の言語でもよく使われるスタイルで、読みやすいです。

② 関数名に値を代入する

AddNumbers = a + b

VBの昔ながらの書き方。こちらも使えますが、最近では Return の方が主流です。


まとめると?

用途戻り値主な使い道
Sub返さないメッセージ表示、ファイル書き込みなど「処理だけしたいとき」
Function返す計算、判定、データ変換など「処理結果が必要なとき」

クラスで使うSubとFunction

もちろん、SubとFunctionはクラスの中にも書けます。

こんな感じ:

Public Class MathOperations
    Public Sub ShowMessage(message As String)
        MsgBox message
    End Sub

    Public Function Multiply(x As Integer, y As Integer) As Integer
        Return x * y
    End Function
End Class

呼び出しはこうなります:

Dim ops As New MathOperations()
ops.ShowMessage("こんにちは!")
Dim product = ops.Multiply(3, 5)
MsgBox "答えは " & product

静的(Shared)なSubとFunctionもある

インスタンスを作らなくても呼べる「静的メソッド」は、Shared を使って書きます。

Public Class Util
    Public Shared Sub Greet(name As String)
        MsgBox "Hello, " & name
    End Sub

    Public Shared Function Square(x As Integer) As Integer
        Return x * x
    End Function
End Class

使うときはこう:

Util.Greet("Taro")
Dim result = Util.Square(6)
MsgBox result  '→ 36

よくある疑問:「Subで書くべきか?Functionで書くべきか?」

これはズバリ、「戻り値が必要かどうか」で決めるのが基本です。

  • 結果を返す必要がある → Function
  • 処理だけでいい → Sub

もし迷ったら、「このメソッド、値を返したい?」と自分に聞いてみてください。


というわけで

SubとFunctionの違い、少しはスッキリしましたか?
最初はただのキーワードにしか見えませんが、実際にコードを書いていくと「お、ここはFunctionにした方がいいな」と自然に分かってくるようになります。

焦らず、少しずつ慣れていきましょう。
何か分からないことがあったら、また気軽に聞いてくださいね!