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

 

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ベーシック選択問題集をご用意しました。

👉無料ExcelVBAベーシック選択問題138問

 

特定の列でデータが埋まっている最終行を取得

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エキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。

👉無料ExcelVBAベーシック選択問題138問