今回はExcelVBAでテーブルの最終行にデータを入れる方法を解説します。
簡単に自己紹介ですが私は会社員15年程経験しその中でExcelVBAを使い沢山の効率化を図ってきました。Excelの資格も取得していますので有益な情報になると思います。
今回の記事の対象者
- ExcelVBAでテーブル化したが最終行が適切に取得出来ない
- ExcelVBAでテーブルの最終行にデータを入れる方法を知りたい
上記1つでも当てはまる方は読んで下さい。
今回の記事を見た事で得られる事
- ExcelVBAでテーブルの最終行にデータを入れる方法がわかる
では早速ですが解説します。
まず、1つ注意点ですが【テーブル化していない場合】の最終行取得を取得して1行下に「あ」と入れる場合には以下のようなコードで実現出来ます。
Sub test4()
Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
'最終行取得
Dim lastrow As Long: lastrow = ws.Range("A" & Rows.count).End(xlUp).Row
'最終行より1行下に「あ」と入力する
ws.Range("A" & lastrow).Offset(1, 0).Value = "あ"
End Sub
ここで注意なのは、上記のコードは【テーブル化していない】場合です。
【テーブル化している】場合にはエラーは出ないですが思ったような結果が返ってこないと思います。
「いや、思った通りの結果が返ってきているよ」という方は一度、テーブルのヘッダー行のみ残してあとは削除してみて下さい。思った通りの結果が返ってこなくなったと思います。
では、【テーブル化している】場合には以下のコードが有効です。
※事前にテーブルの範囲を右下のテーブル範囲の設定でヘッダー行の1行下に戻しておいて下さい。
Sub AddDataToTable2()
Dim tbl As ListObject
'テーブル名【テーブル1】を定義
Set tbl = ActiveSheet.ListObjects("テーブル1")
' データを追加する行を取得
Dim lastRow As ListRow
Set lastRow = tbl.ListRows.Add
' IDに最終行+1の値を設定
lastRow.Range(1) = tbl.ListRows.Count ' 最終行の行番号を取得して、IDに設定
' 日付に現在の日付を設定
lastRow.Range(2) = Date
' 氏名に値を設定
lastRow.Range(3) = "山田 太郎"
End Sub
これで思った通りの結果が返ってきたと思います。
序盤でListObjects(“テーブル1”)でテーブルの事を指し示す事です。
これを記述する事で以後、テーブル1の事を言っているんだなと認識されます。
まとめ
最終行を取得する場合にはその範囲がテーブル化されているのか、テーブル化されていないのかを判断し、その条件に合った方法で最終行を取得して下さい。

