Excel VBAを使用してデータを処理する際には、データが空白行で区切られているケースがあります。こうした場合、For文と組み合わせて空白行を検出し、その点で処理を停止する方法が有効です。
処理の基本構造
以下のサンプルコードは、Excelのシート上のデータを一行ずつ読み取り、空白行に達するまで特定の処理(この例ではセルの内容をイミディエイトウィンドウに出力)を行います。
Sub ProcessUntilBlankRow()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Dim i As Long
' シートのデータを1行目からチェック
For i = 1 To ws.Rows.Count
' 空白行を検出した場合、ループを抜ける
If IsEmpty(ws.Cells(i, 1).Value) Then
Exit For
' 空白でない場合、その行のデータを処理
Debug.Print ws.Cells(i, 1).Value
Next i
End Sub
- 【コード解説】
ワークシートの設定
最初に、処理対象のワークシートをws変数に設定します。 - For文での行の繰り返し処理
For i = 1 To ws.Rows.Countというループを使って、ワークシートの1行目から最終行までのデータを順に調べます。ws.Rows.Countはシートの行数を返しますが、通常はデータのある範囲のみを対象とした方が効率的です。 - 空白行の検出とループの終了
IsEmpty(ws.Cells(i, 1).Value)関数を使用して、各行の第1列目が空白かどうかをチェックします。空白行が検出された場合、Exit ForステートメントによりForループを直ちに抜けます。【VBA】Exit Forの入れ子(ネスト)する方法:For文 - データの処理
空白行でなければ、その行のデータ(ここでは第1列の値)をイミディエイトウィンドウに出力します。
まとめ
この方法を使用することで、Excel VBAを使ったデータ処理を効率化し、不必要な処理を避けることができます。特にデータが不連続で存在する場合や、データの区切りが空白行で示されている場合に有効です。