Excel VBA でプログラムを作成する際、同じ処理を何度も記述するのは非効率的 です。
VBA では Sub(サブプロシージャ) や Function(関数) を使用することで、コードの重複を避け、可読性・保守性を向上 させることができます。
本記事では、同じ処理を繰り返し呼び出す方法 を詳しく解説します。
目次
同じ処理を Sub や Function に分けるメリット
同じ処理を Sub や Function にまとめる ことで、以下のメリットがあります。
✅ コードの再利用(DRY原則: Don’t Repeat Yourself)
✅ コードの可読性向上(処理が整理され、理解しやすくなる)
✅ メンテナンス性の向上(修正時に一箇所だけ変更すればOK)
Sub(サブプロシージャ)を使った処理の呼び出し
・ 基本的な Sub の作成と呼び出し
Sub(サブプロシージャ) は、処理をまとめて実行するブロックです。
引数を使うことで、異なる値を渡して汎用的に利用 できます。
コード例: 同じ処理を Sub にまとめる
Sub ShowMessage(name As String)
MsgBox "こんにちは、" & name & "さん!"
End Sub
Sub CallShowMessage()
' "ShowMessage" Sub を 3 回呼び出し
ShowMessage "田中"
ShowMessage "佐藤"
ShowMessage "鈴木"
End Sub
✅ ShowMessage
は名前を受け取り、MsgBox
で表示
✅ CallShowMessage
で ShowMessage
を 複数回呼び出し
・ ワークシートのセルに値を設定する
セルに値をセットする処理を Sub にまとめて再利用 します。
コード例: セルの値を設定する Sub
Sub SetCellValue(sheetName As String, cellAddress As String, value As Variant)
Sheets(sheetName).Range(cellAddress).Value = value
End Sub
Sub ExampleCall()
' 同じ処理を複数回呼び出し
SetCellValue "Sheet1", "A1", "Hello"
SetCellValue "Sheet1", "A2", "VBA"
SetCellValue "Sheet1", "A3", 100
End Sub
✅ SetCellValue
を使うと、異なるシート・セルに簡単にデータを設定可能
✅ ExampleCall
で 関数を繰り返し利用 し、セルの値を設定
Function(関数)を使って値を返す
Function(関数) は、計算結果などを 戻り値として返す ことができます。
・ 基本的な Function の作成と呼び出し
Function AddNumbers(a As Double, b As Double) As Double
AddNumbers = a + b
End Function
Sub UseFunction()
Dim result As Double
result = AddNumbers(10, 20)
MsgBox "合計: " & result
End Sub
✅ Function
は 計算結果を返す(Sub とは異なり、値を戻す)
✅ UseFunction
で 関数を呼び出し、結果を取得
平均値を求める関数
複数の値の平均を計算する 汎用的な関数 を作成し、再利用します。
コード例: 平均値を求める関数
Function CalculateAverage(rng As Range) As Double
Dim sum As Double, count As Integer
Dim cell As Range
sum = 0
count = 0
' セル範囲をループして合計値とカウントを取得
For Each cell In rng
If IsNumeric(cell.Value) Then
sum = sum + cell.Value
count = count + 1
End If
Next cell
' 平均値を計算
If count > 0 Then
CalculateAverage = sum / count
Else
CalculateAverage = 0
End If
End Function
Sub UseCalculateAverage()
Dim avg As Double
avg = CalculateAverage(Sheets("Sheet1").Range("A1:A10"))
MsgBox "平均値: " & avg
End Sub
✅ CalculateAverage
を作成し、どの範囲でも平均を計算可能
✅ UseCalculateAverage
で関数を 簡単に呼び出し
ループを使って同じ処理を呼び出す
関数や Sub を ループで繰り返し呼び出す ことで、より効率的に処理を行えます。
・ ループを活用したセルの色変更
Sub ChangeCellColor(rng As Range, color As Long)
rng.Interior.Color = color
End Sub
Sub ApplyColorToMultipleCells()
Dim i As Integer
Dim ws As Worksheet
Set ws = Sheets("Sheet1")
' ループで複数セルに色を適用
For i = 1 To 10
ChangeCellColor ws.Cells(i, 1), RGB(255, 255, 0) ' A列の背景を黄色に
Next i
End Sub
✅ ChangeCellColor
を 汎用的な関数として作成
✅ ApplyColorToMultipleCells
で ループを活用し、一括で色変更
複数の Sub や Function を組み合わせる
複数の Sub や Function を組み合わせて、より柔軟な処理 を実装できます。
シートを作成し、セルに値を入力する
Sub CreateSheet(sheetName As String)
Dim ws As Worksheet
On Error Resume Next
Set ws = Sheets(sheetName)
On Error GoTo 0
If ws Is Nothing Then
Set ws = Sheets.Add
ws.Name = sheetName
End If
End Sub
Sub SetupSheet()
CreateSheet "Report" ' シートを作成
SetCellValue "Report", "A1", "レポート日付"
SetCellValue "Report", "A2", Date
End Sub
✅ CreateSheet
で シートを作成(存在しなければ新規作成)
✅ SetCellValue
を再利用し、データを入力
まとめ
方法 | 説明 |
---|---|
Sub を活用 | コードを分割し、再利用可能な処理を作成 |
Function を活用 | 計算結果を戻り値として返す処理を作成 |
ループを使用 | 同じ処理を複数回実行し、コードの簡潔化 |
Sub や Function の組み合わせ | より柔軟な VBA コードを実現 |
💡 ポイント ✅ 繰り返しの処理を Sub や Function に分けると、メンテナンスが簡単
✅ ループを活用すると、大量のデータを効率的に処理できる
✅ 関数を適切に使うことで、値を返す処理が簡潔になる
VBA を効率よく活用するために、Sub と Function を適切に使い分けて、コードの再利用性を高めましょう!