Excel VBA(Visual Basic for Applications)を使って業務効率化を図る上で、データの最終行を正確に取得する処理は欠かせません。
最終行の取得方法は1つではなく、状況や用途に応じて使い分けることが重要です。この記事では、VBAでの最終行の取得方法について、代表的なコードの書き方とその違い、メリット・デメリットを含めて、初心者でも理解しやすく丁寧に解説していきます。
最もよく使われる方法がこちらです。
たとえば、A列の最終行を取得したい場合、次のように書きます。
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
このコードは、A列(第1列)の一番下の行から上に向かってデータがあるセルを探し、その行番号を返します。
「空白を飛ばして一番下まで探したい」ケースで非常に有効です。
Cells(Rows.Count, 2)
)に対して使えるブックの使用されている範囲全体から最終行を調べたい場合は、以下のような方法があります。
Dim lastRow As Long
lastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
この方法は、ワークシートの使用範囲全体に対して最終行を取得します。
ただし、セルの書式や空白を含めて「使用されている」と判断されるので、不要なデータがあると誤差が出ることがあります。
データが特定の値で始まっているとき、その値を探して最終行を取得する場合は、Find
メソッドが役立ちます。
Dim lastRow As Long
With Worksheets("Sheet1")
Dim rng As Range
Set rng = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If Not rng Is Nothing Then
lastRow = rng.Row
Else
lastRow = 1 ' データがない場合
End If
End With
この方法は、セルの内容を探すため、見た目上「空白でも書式が残ってる」場合に対応できます。
Dim lastRow As Long
lastRow = WorksheetFunction.CountA(Range("A:A"))
この方法は、A列のデータがいくつあるかを数え、その数値を最終行とする簡易的な方法です。
ただし、途中に空白があると正しい行番号にならない可能性があります。
方法 | 特徴 | 向いているケース |
---|---|---|
Cells(Rows.Count, x).End(xlUp) | 実務で最も多用される。途中の空白に強い。 | データが連続していない場合 |
UsedRange | シート全体の使用範囲で取得。 | 使用範囲全体で最終行を見たい時 |
Find メソッド | 最も正確。空白や書式にも強い。 | 高精度が求められる時 |
WorksheetFunction.CountA | 軽量処理。簡単だが精度は低め。 | 簡易的なチェックや試作スクリプト |
最終行の変数は Long
型で定義するのが基本です。
数値が大きくなる可能性があるため、Integer
では足りません。
空白シートや非表示セルだけのケースでは Find
が Nothing
を返すことがあります。
このときは If Not rng Is Nothing
での判定を忘れずに。
削除したセルの書式が残っていると「使用済み」と見なされることがあります。
不要なセルの書式をクリアする、行全体を削除するなどの対応が必要です。
たとえば複数のシートにデータがあって、それぞれのシートの最終行をループで取得することも可能です。
Dim ws As Worksheet
Dim lastRow As Long
For Each ws In ThisWorkbook.Worksheets
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Debug.Print ws.Name & " の最終行は " & lastRow
Next ws
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(lastRow, 1).Value = "新しいデータ"
VBAでの最終行の取得は、状況に応じた「適切な方法の選択」が鍵です。
シンプルな処理には Cells(Rows.Count, x).End(xlUp)
、正確性が必要な場合には Find
や UsedRange
を使うのが良いでしょう。
今回ご紹介した方法を覚えておけば、どんなシート構成でも対応できるVBAスキルが身につくはずです。