VBAテクニック集 VBA一覧 呼び出し処理 文法・構文

【VBA】同じ処理を効率的に呼び出す方法(関数・Sub の活用)

Excel VBA でプログラムを作成する際、同じ処理を何度も記述するのは非効率的 です。
VBA では Sub(サブプロシージャ)Function(関数) を使用することで、コードの重複を避け、可読性・保守性を向上 させることができます。

本記事では、同じ処理を繰り返し呼び出す方法 を詳しく解説します。

同じ処理を Sub や Function に分けるメリット

同じ処理を Sub や Function にまとめる ことで、以下のメリットがあります。

コードの再利用(DRY原則: Don’t Repeat Yourself)
コードの可読性向上(処理が整理され、理解しやすくなる)
メンテナンス性の向上(修正時に一箇所だけ変更すればOK)

【VBA】Sub関数とFunction:違い

【VBA】Exit Functionの基本~実用的な使い方

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 で表示
CallShowMessageShowMessage複数回呼び出し

・ ワークシートのセルに値を設定する

セルに値をセットする処理を 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関数を呼び出し、結果を取得

【VBA】Function関数の呼び出しと引数の関係性とは

平均値を求める関数

複数の値の平均を計算する 汎用的な関数 を作成し、再利用します。

コード例: 平均値を求める関数

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 を適切に使い分けて、コードの再利用性を高めましょう!

-VBAテクニック集, VBA一覧, 呼び出し処理, 文法・構文