Excel VBA  行番号・最終行取得|データ処理の範囲を動的に指定する方法

 

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エキスパート資格を解説!