For文 VBAテクニック集 VBA一覧 文法・構文

【VBA】For文で複数の変数を扱う方法|実務で使うループ設計

VBAでFor文を使って処理を作成していると、
「ループの中で別の数値も同時に管理したい」
「処理件数を数えながらデータを更新したい」
「行番号とは別に連番を振りたい」
といった場面に直面することがあります。

このとき、
1つの変数だけで処理しようとすると、コードが複雑になったり、意図しない動作を招いたりすることがあります。

実務ではむしろ、
複数の変数を役割ごとに分けて管理することが、
保守性・再利用性・読みやすさを高める重要な設計になります。

この記事では、
For文で複数の変数を安全に扱う基本から、実務で頻繁に登場するパターン、設計上の注意点まで
実務目線で分かりやすく解説していきます。

✅ VBA For文で複数の変数を扱う基本的な考え方

For文で複数の変数を扱うと聞くと、難しい処理のように感じるかもしれません。しかし実務では、むしろ1つの変数だけで無理に処理しようとする方が危険です。例えば、行番号と処理件数を同じ変数で管理してしまうと、後から修正するときに混乱が生じやすくなります。また、変数の役割が曖昧なままコードを書いてしまうと、引き継ぎ時に理解されにくいマクロになります。重要なのは、変数を増やすことではなく、役割を明確にすることです。この章では、まず基本的な考え方を整理していきます。

・例:ループ変数と処理件数を同時に管理する方法

Dim rowIndex As Long
Dim processedCount As Long

processedCount = 0

For rowIndex = 2 To 10

    processedCount = processedCount + 1

Next rowIndex

MsgBox "処理件数:" & processedCount

このコードでは:

  • rowIndex:現在処理している行番号
  • processedCount:処理した件数

という役割になっています。

ここで重要なのは:

ループ変数と業務変数は別物

という考え方です。


✅ For文で複数の変数を扱う実務例:行番号と連番を同時に管理する

実務では、単純にデータを処理するだけでなく、連番を付けたり、件数を管理したりする処理が頻繁に登場します。例えば、一覧表に連番を振る作業や、処理済みデータの数を記録する処理などです。このような場合、ループ変数だけで処理しようとすると、コードの意図が分かりにくくなります。また、仕様変更があったときに修正範囲が広がる原因にもなります。ここでは、実務で非常によく使われる「行番号と連番を同時に管理する」例を確認していきます。このパターンは、多くの業務で応用できる基本形です。

・例:行番号とは別に連番を付ける処理

Dim rowIndex As Long
Dim sequenceNumber As Long
Dim lastRow As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

sequenceNumber = 1

For rowIndex = 2 To lastRow

    Cells(rowIndex, 2).Value = sequenceNumber
    
    sequenceNumber = sequenceNumber + 1

Next rowIndex

この処理は:

  • 行番号(rowIndex)
  • 連番(sequenceNumber)

を同時に管理しています。

・実務での活用例

例えば:

  • 受注データに連番を付ける
  • 出力データの順番を管理する
  • 処理ログの番号を記録する

といった場面です。

ここまでで、行番号と連番を同時に管理する方法が理解できたと思います。
このような処理をより安全に実装するためには、
行を正確に指定する方法をしっかり理解しておくことが重要です。
行の指定や最終行の取得など、実務で頻繁に使用する操作については、
【VBA】Rowsの基本的な使い方|行指定・複数行・最終行取得まで解説」もあわせて確認しておきましょう。


✅ For文で複数の変数を使う典型的な実務パターン

複数の変数を扱う場面は、特別なケースではなく、日常的に発生するものです。特に、配列処理やデータ転記などでは、複数の情報を同時に管理する必要があります。このとき、変数の役割を整理せずに実装すると、後から修正する際に不具合が発生しやすくなります。また、変数の意味が分からない状態になると、コードの信頼性も低下します。ここでは、実務で最もよく使われるパターンを整理していきます。これらを理解しておくことで、さまざまな業務に対応できるようになります。

・例:データの件数をカウントしながら処理する方法

Dim rowIndex As Long
Dim validCount As Long
Dim lastRow As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

validCount = 0

For rowIndex = 2 To lastRow

    If Cells(rowIndex, 1).Value <> "" Then
    
        validCount = validCount + 1
        
    End If

Next rowIndex

MsgBox "有効データ数:" & validCount

・例:行番号と列番号を同時に管理する方法

Dim rowIndex As Long
Dim columnIndex As Long

For rowIndex = 2 To 5

    columnIndex = 1
    
    Cells(rowIndex, columnIndex).Value = "更新済"

Next rowIndex

このように:

  • 件数

などを別々の変数で管理することが、実務では非常に重要になります。

ここまでで、複数の変数を使って処理件数やデータの状態を管理する方法が理解できたと思います。
次に重要になるのは、
どこまで処理を繰り返すかを正確に判断することです。
特に、空白行を基準に処理を終了する場面は、実務で非常に多くあります。
こうした繰り返し制御の具体的な方法については、
【VBA】For文:空白行まで繰り返す処理方法」もあわせて確認しておきましょう。


✅ For文で複数の変数を扱うときの設計上の注意点

複数の変数を扱うこと自体は難しいことではありませんが、設計を誤ると不具合の原因になります。特に、変数の役割が曖昧なまま処理を追加してしまうと、後から原因不明のエラーが発生することがあります。また、初期化を忘れると、前回の値が残ってしまうこともあります。こうした問題は、開発時には気付きにくく、本番環境で初めて発覚することも少なくありません。この章では、実務で特に注意すべきポイントを整理しておきます。

・注意:変数の初期化を忘れない

validCount = 0

この1行を忘れると:

  • 前回の値が残る
  • 件数が増え続ける

といった問題が発生します。

・注意:変数の役割を混同しない

悪い例:

Dim i As Long

良い例:

Dim rowIndex As Long
Dim processedCount As Long

✅ 複数の変数を扱うときは「役割」で命名する

変数名は単なる記号ではなく、コードの設計を表す重要な情報です。特に複数の変数を扱う場合、名前が曖昧だと処理の意図が分からなくなります。また、将来別の担当者が修正する際にも、大きな障害になります。逆に、役割が明確な名前を付けておけば、コードを読むだけで処理内容が理解できます。これは、保守性と再利用性を高めるための基本です。この章では、命名の考え方を整理していきます。

・悪い例:意味が分からない変数名

Dim i As Long
Dim j As Long
Dim k As Long

・良い例:役割が分かる変数名

Dim rowIndex As Long
Dim recordCount As Long
Dim outputColumn As Long

このように:

変数名は役割を表す言葉にする

ことが重要です。


✅ 複数の変数を扱う処理を関数化して再利用する設計

同じ処理を複数の場所で使用する場合、コードをコピーして使い回すと、修正漏れや不具合の原因になります。特に、複数の変数を扱う処理は、仕様変更の影響を受けやすい部分です。そこで重要になるのが、処理の共通化です。関数やサブルーチンとしてまとめておけば、変更があった場合でも修正箇所は1か所で済みます。また、コードの再利用性も高まります。この考え方は、長期的な運用を考える上で非常に重要です。

・例:複数の変数を扱う処理をサブルーチン化する方法

Sub CountValidData()

    Dim rowIndex As Long
    Dim validCount As Long
    Dim lastRow As Long
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    validCount = 0
    
    For rowIndex = 2 To lastRow
    
        If Cells(rowIndex, 1).Value <> "" Then
        
            validCount = validCount + 1
            
        End If
    
    Next rowIndex
    
    MsgBox "有効データ数:" & validCount

End Sub

・なぜこの書き方にしているのか

理由:

  • 処理の責任範囲が明確になる
  • 再利用しやすい
  • 修正箇所が1か所になる

これは:

保守性の高い設計

につながります。

ここまでで、複数の変数を扱う処理を関数化することで、
再利用しやすく保守性の高いコードを作成できることが理解できたと思います。
次に重要になるのは、
作成した処理をどこから呼び出し、どのように管理するかという設計です。
SubやFunctionの使い分けや、標準モジュールの役割については、
【VBA】標準モジュールの呼び出し方法とは|Sub・Functionの使い分けと実務設計」もあわせて確認しておきましょう。


✅Excelユーザーへの一歩先の提案:複数変数の管理は自動化設計の基礎になる

もし現在:

  • 手作業で件数を確認している
  • 処理回数を目視で管理している
  • データ更新を個別に確認している

という場合は、
VBAで変数を使って管理することで、作業の正確性が大きく向上します。

特に:

  • データ更新
  • 重複チェック
  • 一括処理
  • ログ管理

といった業務では、
複数の変数を適切に扱うことが、安定した自動化の基礎になります。


 

✅ まとめ:For文で複数の変数を扱うことは実務設計の基本

  • 複数の変数を扱うことは特別な技術ではない
  • 変数は役割ごとに分けて管理する
  • ループ変数と業務変数は別物として考える
  • 変数名は意味が分かる名前にする
  • 処理は関数化して再利用できるようにする

For文で複数の変数を扱うことは、
単なるテクニックではなく、
実務で壊れないマクロを作るための基本設計です。

この考え方を身につけておくことで、
将来より複雑な処理を扱う場合でも、
安心して運用できるマクロを作成できるようになります。

ぜひ、実際の業務データで試してみてください。

    -For文, VBAテクニック集, VBA一覧, 文法・構文