「エクセル マクロ テーブル 最終行の取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
テーブル・ListObjectオブジェクトの最終行を取得するExcelマクロ・VBAのコードを探している方による検索です。
Excelのテーブルを表すListObjectオブジェクトは便利ではありますが、オブジェクトモデルの階層が深いのが難点です。
最終行を取得するコードを理解するには、まずは先頭行を取得するコードと、テーブルの行数を取得するコードの2つをしっかりと理解しましょう。
テーブルの最終行を取得するサンプルマクロ
で、最終行を取得するマクロは、以下のとおりです。
With ActiveSheet.ListObjects(1).ListRows
With .Item(.Count).Range
MsgBox .Address(False, False)
MsgBox .Row
.Select
End With
End With
上記のマクロを実行すると、最終行のセル範囲・行番号が順番にメッセージボックスに表示され、最後に選択が行われます。
考え方は既にご紹介している先頭行を取得するマクロと同じですが、最終行を取得するために、テーブルの行数を取得する必要があるため、先頭行を取得するマクロより難易度が上がっています。
変数を使ってテーブルの最終行を取得するサンプルマクロ
上記のWithを使ったマクロが理解できないという方は、変数を使った以下のコードを先に理解することをおすすめします。
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
アクティブなシート上の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マクロ