ExcelVBAでデータ処理をする場合、よくあるのが
**「データがある行(まで処理したい」**というケースです。
今回の記事では以下3つに絞って解説していきます。
・ExcelVBAで最終行を取得する方法
・Rows.CountとEnd(xlUp)の仕組み
・For Nextでデータを自動処理する方法
最終行を取得する意味とは?
例えば次のような表です。
| 商品 | 数量 |
|---|---|
| りんご | 10 |
| みかん | 0 |
| バナナ | 8 |
このようなデータをVBAで処理する場合、
データが入力されている最後の行まで処理する必要があります。
次のようなコードを書いても問題はありません。
For i = 2 To 100
処理速度的なものはたった3行だとさほど変化はありません。
ですが、実際には何千何万というデータ処理をすることは珍しくありません。
そんな時に無駄な行まで処理していては、マクロで処理する速度が遅くなるため、
この書き方はあまりおすすめできません。
そこで使うのが 最終行を取得するコード です。
最終行を取得するVBAコード
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox "A列の最終行は" & LastRow & "行です"
このコードを使うと、
データが入力されている最後の行番号を取得できます。
For Nextと組み合わせる
最終行を取得するコードは
For Nextと組み合わせてループ処理を行うととても便利です。
例えば次のコードです。
今回は数量が「0」で欠品している商品を検索し、
メッセージで表示するVBAを作っています。
メッセージ表示だけでなく、次のような処理にも応用できます。
・セルの色を変える
・C列に「欠品」と入力する
・欠品商品の発注書を作成して自動印刷する
使い方によって、自動化の可能性は無限に広がります。
Sub Sample()
Dim lastRow As Long
Dim i As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If Cells(i, 2) = 0 Then
MsgBox Cells(i, 1) & "は欠品しています"
End If
Next i
End Sub
このコードでは次の流れで処理しています。
- 最終行を取得する
- For Nextでループする
- B列の「0」を検索する
- 条件に合致した場合、メッセージを表示する
コードを分解して解説
Rows.Count
Rows.Count
Excelの一番下の行番号を取得します。
現在のExcelは
1,048,576行あります。
Cells(Rows.Count,1)
Cells(Rows.Count,1)
これは A列の一番下のセル を意味します。
つまり
A1048576セルです。
End(xlUp)
End(xlUp)
これは Ctrl + ↑キー と同じ動きをします。
一番下のセルから上に移動して、
最初にデータがあるセルを見つけます。
Row
.Row
見つかったセルの 行番号 を取得します。
実務での実践例
このコードは実務でも非常によく使います。
例えば
・売上データのチェック
・部品リストの処理
・在庫データの整理
などです。
Excelのデータは毎回行数が変わるため、
For Nextと最終行取得の組み合わせはVBAの基本テクニックです。
💡まとめ
今回は、VBAで最終行までループする方法を紹介しました。
ポイントは次の3つです。
・Rows.Countで一番下の行を取得する
・End(xlUp)でデータのある行を探す
・For Nextと組み合わせてループ処理する
この方法を覚えると、
データ件数が変わっても対応できるVBAを書くことができます。
明日から皆さんもVBAマスターを目指して、
定時帰りな人になれるよう頑張っていきましょう!


コメント