ExcelVBAでテーブル最終行にデータを入れる方法|【コピペで解決】

ExcelVBA

今回は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の事を言っているんだなと認識されます。

まとめ

最終行を取得する場合にはその範囲がテーブル化されているのか、テーブル化されていないのかを判断し、その条件に合った方法で最終行を取得して下さい。

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