Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » ListObject・テーブルの最終行を取得するExcelマクロ

ListObject・テーブルの最終行を取得するExcelマクロ

対象:Excel2007, Excel2010, Excel2013

「エクセル マクロ テーブル 最終行の取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

テーブル・ListObjectオブジェクトの最終行を取得するExcelマクロ・VBAのコードを探している方による検索です。

Excelのテーブルを表すListObjectオブジェクトは便利ではありますが、オブジェクトモデルの階層が深いのが難点です。

最終行を取得するコードを理解するには、まずは先頭行を取得するコードと、テーブルの行数を取得するコードの2つをしっかりと理解しましょう。

[スポンサードリンク]

テーブルの最終行を取得するサンプルマクロ

で、最終行を取得するマクロは、以下のとおりです。

Sub テーブルの最終行を取得する_With()

 With ActiveSheet.ListObjects(1).ListRows
  With .Item(.Count).Range

   MsgBox .Address(False, False)
   MsgBox .Row
   .Select

  End With
 End With

End Sub

上記のマクロを実行すると、最終行のセル範囲・行番号が順番にメッセージボックスに表示され、最後に選択が行われます。

考え方は既にご紹介している先頭行を取得するマクロと同じですが、最終行を取得するために、テーブルの行数を取得する必要があるため、先頭行を取得するマクロより難易度が上がっています。

変数を使ってテーブルの最終行を取得するサンプルマクロ

上記のWithを使ったマクロが理解できないという方は、変数を使った以下のコードを先に理解することをおすすめします。

Sub テーブルの最終行を取得する_変数()

 Dim lst As ListObject
 Dim cnt As Long
 Dim rng As Range

 Set lst = ActiveSheet.ListObjects(1)
 cnt = lst.ListRows.Count
 Set rng = lst.ListRows(cnt).Range

 MsgBox rng.Address(False, False)
 MsgBox rng.Row
 rng.Select

End Sub

アクティブなシート上の1つ目のListObjectオブジェクトを変数・lstに格納して、
 Set lst = ActiveSheet.ListObjects(1)

テーブルの行数を変数・cntに代入して、
 cnt = lst.ListRows.Count

最終行を表すセル範囲を変数・rngに格納して、
 Set rng = lst.ListRows(cnt).Range

最終行のセル範囲をメッセージボックスに表示し、
 MsgBox rng.Address(False, False)

最終行の行番号をメッセージボックスに表示し、
 MsgBox rng.Row

最終行を選択しています。
 rng.Select

このコードを、変数を使わないで書くと、
 With ActiveSheet.ListObjects(1).ListRows
  With .Item(.Count).Range
   MsgBox .Address(False, False)
   MsgBox .Row
   .Select
  End With
 End With
となるわけです。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » ListObject・テーブルの最終行を取得するExcelマクロ

「ListObjectオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.