【VBA】変数宣言を最初にまとめるべきか

VBA

VBAでの変数宣言について、「先頭でまとめるべきか?」という疑問を持つ方も多いと思います。本記事では、可読性や保守性を向上させるための最適な変数宣言の方法について解説します。


1. 変数を先頭で宣言するメリット

コードの可読性が向上

関数の冒頭で変数をまとめて宣言することで、「どんなデータを扱うのか」が明確になります。

Sub Sample()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Integer

    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow
        Debug.Print ws.Cells(i, 1).Value
    Next i
End Sub

データ型の統一がしやすい

変数を途中で宣言すると、データ型のミスや再宣言が発生しやすくなります。Option Explicit を利用することで、すべての変数を明示的に宣言しないとエラーになるため、ミスを防ぐことができます。

Option Explicit

Sub Example()
    Dim count As Integer
    Dim name As String
    Dim total As Double
End Sub

保守性が向上

チーム開発においても、どの変数が使用されているかすぐに把握できるため、コードの管理がしやすくなります。


2. 途中で変数を宣言した方が良いケース

🔸 スコープを限定する場合

関数の最初にすべての変数を宣言すると、不要な範囲で変数が有効になってしまいます。必要な箇所でローカルに宣言することで、意図しない使用を防げます。

Sub ProcessData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    Dim i As Integer
    For i = 2 To 10
        Dim value As Double ' ループ内でのみ使用する変数
        value = ws.Cells(i, 1).Value * 1.1
        ws.Cells(i, 2).Value = value
    Next i
End Sub

🔸 一時的な変数を使う場合

一時的な変数を「使う直前に宣言」することで、コードの流れが分かりやすくなることもあります。

Sub CalculateTotal()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    Dim lastRow As Long
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

    If lastRow > 1 Then
        Dim total As Double ' ここでのみ必要な変数
        total = Application.WorksheetFunction.Sum(ws.Range("A2:A" & lastRow))
        ws.Range("B1").Value = total
    End If
End Sub

3. ベストプラクティスのまとめ

ルール理由
基本的には関数の先頭で変数をまとめる可読性・保守性が向上
変数のスコープを適切に考える不要な範囲で変数を有効にしない
ループや条件分岐内でしか使わない変数は、ブロック内で宣言する変数の使用意図が明確になる
Option Explicit を使う型ミスや未宣言の変数を防ぐ

4. 最適な書き方の例

Option Explicit

Sub OptimizedCode()
    ' ① 主要な変数は関数の最初に宣言
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Integer

    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

    ' ② ループ内でのみ必要な変数はブロック内で宣言
    For i = 2 To lastRow
        Dim value As Double
        value = ws.Cells(i, 1).Value * 1.1
        ws.Cells(i, 2).Value = value
    Next i
End Sub

主要な変数は関数の先頭で宣言
ループ内でのみ使う変数はブロック内で宣言
Option Explicit を使ってミスを防ぐ

このルールを意識すれば、可読性・保守性の高いVBAコードが書けるようになります!

当たり前に疑問を持つことが成長につながるのです!!

コメント

タイトルとURLをコピーしました