エクセル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」の違い
特徴 | Sub | Function |
---|---|---|
戻り値があるか | なし | あり |
実行方法 | マクロとして実行 | セルや他のプロシージャ内で利用可能 |
主な用途 | 処理の実行 | 計算や結果の返却 |
「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
でセルに入力しています。
使用上の注意点
- SubからFunctionを呼び出す: Functionを使う場合、その結果をSubで利用することが多いです。
- 引数の型指定: Functionで引数を受け取る場合、適切な型を指定することでエラーを防げます。
- 戻り値の指定: Functionの最後に戻り値を指定する必要があります。
Function名 = 値
の形式で設定します。
まとめ
- Sub: 処理を実行するためのプロシージャ(値を返さない)。
- Function: 計算や処理結果を返すためのプロシージャ。
- 使い分けのポイント:
- 結果を返す必要がない場合は
Sub
。 - 計算結果や特定の値を返す必要がある場合は
Function
。
- 結果を返す必要がない場合は
この記事を参考に、目的に応じてSub
とFunction
を使い分けて、効率的なマクロを作成してください!質問やリクエストがあれば、ぜひコメントでお知らせください。