MENU

【VBA】SubとFunctionの違いと使い方を徹底解説!

エクセルVBAでは、プログラムを構成する基本単位として「Sub(サブプロシージャ)」と「Function(関数)」があります。それぞれの役割や使い方を理解することで、効率的なマクロ開発が可能になります。この記事では、「Sub」と「Function」の違いや使い方について詳しく解説します。

「Sub」とは?

Sub(Sub Procedure)は、一連の処理を実行するための手続きです。値を返すことはなく、特定の動作を実行することに重点を置いています。たとえば、セルの値を変更したり、メッセージを表示したりする際に使われます。

基本構文

Sub サブプロシージャ()
    ' 処理内容
End Sub

簡単な例

次の例では、セルA1に値を入力する処理を行います。

Sub SetCellValue()
    Worksheets("Sheet1").Range("A1").Value = "Hello, VBA!"
End Sub

このSubプロシージャを実行すると、シート「Sheet1」のセルA1に「Hello, VBA!」が入力されます。

「Function」とは?

Function(Function Procedure)は、計算や処理を行い、結果を返すための手続きです。値を返すことができるため、セル内の計算式や他のプロシージャで利用されることが多いです。

基本構文

Function 関数名(引数1 As 型, 引数2 As 型, ...) As 戻り値の型
    ' 処理内容
    関数名 = 戻り値
End Function

簡単な例

次の例では、引数として与えられた2つの数値を加算して結果を返します。

Function AddNumbers(num1 As Double, num2 As Double) As Double
    AddNumbers = num1 + num2
End Function

このFunctionは、セル内で次のように使用できます。

=AddNumbers(5, 10) ' 結果は15

「Sub」と「Function」の違い

特徴SubFunction
戻り値があるかなしあり
実行方法マクロとして実行セルや他のプロシージャ内で利用可能
主な用途処理の実行計算や結果の返却

「Sub」と「Function」を使い分ける例

例1: Subを使って特定のセルにデータを設定

Sub FillCells()
    Dim i As Integer
    For i = 1 To 10
        Worksheets("Sheet1").Cells(i, 1).Value = "データ" & i
    Next i
End Sub

このSubプロシージャは、セルA1からA10に「データ1」「データ2」…「データ10」を入力します。

例2: Functionを使って数値を平方にする

Function SquareNumber(num As Double) As Double
    SquareNumber = num ^ 2
End Function

このFunctionは、次のようにセル内で利用できます。

=SquareNumber(4) ' 結果は16

SubとFunctionを組み合わせる例

次の例では、Functionで計算した値をSubでセルに入力します。

Function MultiplyNumbers(num1 As Double, num2 As Double) As Double
    MultiplyNumbers = num1 * num2
End Function

Sub UseMultiplyNumbers()
    Dim result As Double
    result = MultiplyNumbers(5, 3) ' Functionを呼び出す
    Worksheets("Sheet1").Range("B1").Value = result ' 結果をセルに入力
End Sub

このコードは、Functionを使って掛け算を行い、その結果をSubでセルに入力しています。

使用上の注意点

  1. SubからFunctionを呼び出す: Functionを使う場合、その結果をSubで利用することが多いです。
  2. 引数の型指定: Functionで引数を受け取る場合、適切な型を指定することでエラーを防げます。
  3. 戻り値の指定: Functionの最後に戻り値を指定する必要があります。Function名 = 値 の形式で設定します。

まとめ

  • Sub: 処理を実行するためのプロシージャ(値を返さない)。
  • Function: 計算や処理結果を返すためのプロシージャ。
  • 使い分けのポイント:
    • 結果を返す必要がない場合はSub
    • 計算結果や特定の値を返す必要がある場合はFunction

この記事を参考に、目的に応じてSubFunctionを使い分けて、効率的なマクロを作成してください!質問やリクエストがあれば、ぜひコメントでお知らせください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

自動車メーカーで、VBAやRPAを用いた業務効率化・業務改善を行っております。

目次