【Excel VBA】セルの最終行を取得する(End/UsedRange)

はじめに

今回は、セルの最終行を取得する方法について解説します。
最終行の取得には大きく分けて3パターン存在し、それぞれの取得方法を詳しく解説します。

この記事を読むメリット
  • セルの最終行を取得する方法が分かります。
  • 3パターンの取得方法と、それぞれのメリット・デメリットが理解できます。
  • コピペで使える実践的なサンプルコードを掲載しています。

前提

本記事で紹介する最終行とは、「最終行の行番号」を指します。
Cellsプロパティなどで行インデックスを指定して最終行のセルを操作するため、最終行番号を取得しましょう。

最終行の取得方法

#取得方法説明
1下方検索指定したセルから下へ検索し、空行までの行数を取得
2上方検索指定した行列から上へ検索し、空行までの行数を取得
3使用済みセル検索使用しているセルの最終行を取得
最終行の取得方法

取得方法のイメージと注意点

先ほど紹介した通り最終行の取得には、いくつか方法があります。
それぞれの取得方法のイメージや注意点を解説します。

りゅう

取得方法により、メリットやデメリットがあります。
すべての取得方法を理解したうえで、ご使用ください。

下方検索

指定したセルから 下方向に「空白」を検索し「空白」行の手前の行数を取得します。
以下の例であれば、部署コード列のヘッダ部から下に検索を行い、8行目の「8」が取得できます。

下方検索のイメージ
下方検索 – イメージ

下方検索は、Excelショートカットの「Ctrl」 + 「↓」と同様の振る舞いをします。

下方検索の注意点
検索の途中に意図しない空白があると、途中で検索が終了してしまいます。
表の最終行を取得する場合は、必ず空白が入らない列を指定するようにしましょう。

上方検索

指定した列の最下部から 上方向に「値あり」セルを検索し、「値あり」セルの行数を取得します。
以下の例のように1列目を指定した場合には「8」が取得できます。

上方検索のイメージ
上方検索 – イメージ

上方検索は、Excelショートカットの「Ctrl」 + 「↑」と同様の振る舞いをします。

上方検索の注意点
検索の途中に意図しない値があると、途中で検索が終了してしまいます。
表の最終行を取得する場合は、必ず意図しない値が入らない列を指定するようにしましょう。

使用済みセル検索

シート内で、「値が入力されているセルの最終行」を取得します。
以下の例であれば表の最下部である 8行目の行番号が取得できます。
※取得する際、セルの指定は不要です。

使用済みセル検索

使用済みセル検索は、Excelショートカットの「Ctrl」 + 「End」と同様の振る舞いをします。

使用済みセル検索の注意点
以下のように、ゴミデータが表の外に入力されている場合、意図しない行番号が取得されることがあります。

基本情報

Endプロパティ

セルの最終行を取得するには、RangeオブジェクトのEndプロパティを使用します。

構文

構文

Rangeオブジェクト.End(設定値)

設定値

XlDirection定数を指定し、検索方向を指定します。
XlDirection定数については後述します。

XlDirection定数

#定数説明
1xlDown下に向けてセルを検索する
2xlUp上に向けてセルを検索する
3xlToLeft左に向けてセルを検索する
4xlToRight右に向けてセルを検索する
XlDirection定数

サンプルコード

最終行番号の取得(下方検索)

サンプルコード
Public Sub getEndRowIndexForDown()
    Dim endRowIndex As Long    ' 最終行番号

    ' A1セルを起点として最終行番号を取得
    endRowIndex = Range("A1").End(xlDown).Row

    MsgBox "最終行番号:" & endRowIndex, vbInformation
End Sub

最終行の取得(上方検索)

サンプルコード
Public Sub getEndRowIndexForUp()
    Dim endRowIndex As Long    ' 最終行番号

    ' 3列目から上方検索をして最終行番号を取得
    endRowIndex = Cells(Rows.Count, 3).End(xlUp).Row

    MsgBox "最終行番号:" & endRowIndex, vbInformation
End Sub

最終行の取得(使用済みセル検索)

サンプルコード
Public Sub getEndRowIndexForUsedRange()
    Dim endRowIndex As Long    ' 最終行番号

    ' 使用済みセルの最終行番号を取得
    endRowIndex = ActiveSheet.UsedRange.Rows.Count

    MsgBox "最終行番号:" & endRowIndex, vbInformation
End Sub

最後に

今回は、最終行を取得する方法についてご紹介しました。

取得方法により、不具合を埋め込む可能性があるため適切な取得方法を用いてコーディングを実施しましょう。

本記事が、皆さんのお力になれば幸いです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA