
ExcelVBA 行番号や最終行取得してデータ処理の範囲を動的に指定する方法。 固定のセル範囲ではなく、データが増減しても正しく処理できるようにします。使い方や注意点など、サンプルコードをもとに具体的に解説します。
Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る
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列の最終行」を取得する方法(データが途切れず入力されている前提)
・異なる列のデータの最終行を取得したい場合は、該当の列番号に変更
特定の列でデータが埋まっている最終行を取得
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の資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る
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で自動化するコードのベースを習得したい方におすすめ!
VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。
ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。
ExcelVBAエキスパートスタンダード
ExcelVBAの開発を仕事にする人が対象の問題集です。
Excel VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。
Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!