【初心者向け】ExcelVBAで最終行までループする方法|Rows.CountとEnd(xlUp)を解説

Excel/VBA 自動化

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

このコードでは次の流れで処理しています。

  1. 最終行を取得する
  2. For Nextでループする
  3. B列の「0」を検索する
  4. 条件に合致した場合、メッセージを表示する

コードを分解して解説

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マスターを目指して、
定時帰りな人になれるよう頑張っていきましょう!

コメント

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