スポンサーリンク

【VBA】テーブルの最終行を取得して動的処理に応用する方法

Excelのテーブル(ListObject)は、データが日々追加・削除されることが多く、最終行を正しく取得することが非常に重要です。
特に「次の行に新しいデータを追加する」「最終行のデータを読み取る」といった処理では、テーブルの行数が固定されていないため、動的に最終行を取得する必要があります。

ここでは、VBAでテーブルの最終行を取得する方法と、それを応用した処理について解説します。


スポンサーリンク

1. テーブルの最終行を取得する基本構文

テーブルの行は ListRows.Count で数えることができます。
つまり「最終行の番号」=「行数」となります。

サンプルコード(最終行の番号を取得)

Sub テーブル最終行取得()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim lastRow As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set lo = ws.ListObjects("Table1")
    
    'テーブルの最終行番号を取得
    lastRow = lo.ListRows.Count
    
    MsgBox "テーブルの最終行は " & lastRow & " 行目です"
End Sub

スポンサーリンク

2. 最終行の範囲(Range)を取得する方法

単に行数ではなく「最終行のセル範囲」を直接取得することもできます。

サンプルコード(最終行の範囲を取得)

Sub テーブル最終行範囲取得()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim lastRowRange As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set lo = ws.ListObjects("Table1")
    
    '最終行の範囲を取得
    If lo.ListRows.Count > 0 Then
        Set lastRowRange = lo.ListRows(lo.ListRows.Count).Range
        lastRowRange.Select
    Else
        MsgBox "テーブルにデータがありません"
    End If
End Sub

ポイント

  • lo.ListRows(lo.ListRows.Count) → 最終行の ListRow オブジェクトを取得
  • .Range をつけると、その行全体のセル範囲が取得できる

スポンサーリンク

3. 応用例① 最終行にデータを追加する

「最後の行の次にデータを入れる」のではなく、「最終行そのものに値を書き込む」ことも可能です。

Sub テーブル最終行に値入力()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim lastRow As ListRow
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set lo = ws.ListObjects("Table1")
    
    If lo.ListRows.Count > 0 Then
        '最終行のListRowを取得
        Set lastRow = lo.ListRows(lo.ListRows.Count)
        
        '値を入力
        With lastRow.Range
            .Cells(1, 1).Value = "最終商品" '1列目
            .Cells(1, 2).Value = 999       '2列目
            .Cells(1, 3).Value = Date      '3列目
        End With
    End If
End Sub

スポンサーリンク

4. 応用例② 最終行を削除する

最終行を削除する場合も簡単です。

Sub テーブル最終行削除()
    Dim ws As Worksheet
    Dim lo As ListObject
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set lo = ws.ListObjects("Table1")
    
    If lo.ListRows.Count > 0 Then
        lo.ListRows(lo.ListRows.Count).Delete
    End If
End Sub

5. 応用例③ 新しいデータ追加処理に応用

最終行を取得してから 次の行にデータを追加する形で、ログ管理や売上データの蓄積などに応用できます。

Sub テーブル最終行応用_追加()
    Dim ws As Worksheet
    Dim lo As ListObject
    Dim newRow As ListRow
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set lo = ws.ListObjects("Table1")
    
    '新しい行を追加(最終行の次に挿入される)
    Set newRow = lo.ListRows.Add
    
    '新しい行にデータを入力
    With newRow.Range
        .Cells(1, 1).Value = "商品Z"
        .Cells(1, 2).Value = 500
        .Cells(1, 3).Value = Date
    End With
End Sub

6. まとめ

  • 最終行番号は ListRows.Count で取得できる
  • 最終行の範囲は ListRows(ListRows.Count).Range で取得できる
  • 応用すると「最終行への入力」「最終行削除」「次の行に追加」など、柔軟な動的処理が可能

コメント

タイトルとURLをコピーしました