
ExcelVBA 行番号や最終行取得してデータ処理の範囲を動的に指定する方法。 固定のセル範囲ではなく、データが増減しても正しく処理できるようにします。使い方や注意点など、サンプルコードをもとに具体的に解説します。
📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!
👇実務で“そのまま使える”テンプレ付きで、コピペするだけ!
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き
Excel VBA 行番号・最終行取得|シーン
以下のシーンで利用します。
1.データの最終行を取得し、自動で処理範囲を設定(ループ処理、コピー、削除など)
2.指定セルの行番号を取得し、その行のデータを操作(検索結果の特定、データ編集)
Excel VBA 行番号・最終行取得|サンプルコード
Option Explicit
Sub GetActiveRow()
MsgBox "現在の行番号は " & ActiveCell.Row & " です"
End Sub
・アクティブセル(選択セル)がない場合エラーになるので、必ず選択してから実行
データがある範囲の最終行を動的に取得し、ループ処理やコピー処理に活用
Option Explicit
Sub GetLastRow()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets("Sheet1") ' 対象シートを指定
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' A列の最終行取得
MsgBox "最終行は " & lastRow & " 行目です"
End Sub
・ws.Cells(ws.Rows.Count, 1).End(xlUp).Row は「A列の最終行」を取得する方法(データが途切れず入力されている前提)
・異なる列のデータの最終行を取得したい場合は、該当の列番号に変更
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。
特定の列でデータが埋まっている最終行を取得
Option Explicit
Function GetLastRowInColumn(ws As Worksheet, col As Integer) As Long
GetLastRowInColumn = ws.Cells(ws.Rows.Count, col).End(xlUp).Row
End Function
Sub TestGetLastRow()
Dim lastRow As Long
lastRow = GetLastRowInColumn(ThisWorkbook.Sheets("Sheet1"), 2) ' B列の最終行取得
MsgBox "B列の最終行は " & lastRow & " 行目です"
End Sub
・複数の列にデータがある場合、それぞれの最終行を比較する必要がある
シートの最終行を取得するが、途中の空白行がある場合も考慮
Option Explicit
Sub GetLastUsedRow()
Dim ws As Worksheet
Dim lastUsedRow As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
lastUsedRow = ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row
MsgBox "シートの最終行は " & lastUsedRow & " 行目です"
End Sub
・完全に空白のセルは最終行として認識されない場合がある(罫線やフォーマットがあると誤動作の可能性)
他のモジュールでも使える共通関数として実装
Option Explicit
Public Function GetLastRow(ws As Worksheet, col As Integer) As Long
GetLastRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row
End Function
クラスを呼び出すコード(標準モジュール)
Option Explicit
Sub TestClassLastRow()
Dim helper As New clsSheetHelper
Dim lastRow As Long
lastRow = helper.GetLastRow(ThisWorkbook.Sheets("Sheet1"), 1)
MsgBox "A列の最終行は " & lastRow & " 行目です"
End Sub
・クラスモジュールを利用することで、複数のシートで使い回し可能
Excel VBA 行番号・最終行取得|まとめ
目的 | 方法 |
現在の行番号を取得 | ActiveCell.Row |
特定の列の最終行を取得 | ws.Cells(ws.Rows.Count, 列番号).End(xlUp).Row |
UsedRangeで最終行を取得 | ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row |
クラスモジュールで共通化 | GetLastRow(ws, col) |
「Excel VBAで自動化するコードのベースが習得できる解説書」
Excel VBAエキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。