Excel VBAでテーブルのセル範囲を更新(Resize)する方法|データの増減に柔軟対応

Excelで一度作成したテーブル(ListObject)は、データの増減や構成変更に応じて対象範囲を動的に更新することができます。
VBAのResizeメソッドを使えば、テーブルを削除・再作成せずに、範囲だけをスマートに再設定することが可能です。

本記事では、テーブルの扱うセル範囲を動的に変更するVBAコードの実装方法をご紹介いたします。


目次

想定される活用例

  • 行数や列数が変更されたデータに合わせてテーブル範囲を調整したい。
  • シート最終行までのデータを常に取り込むようにしたい。
  • フィルタや書式を維持したまま、テーブルの更新を自動化したい。

VBAコードの例

固定範囲で更新する方法

Sub ResizeTableFixedRange()

    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects("商品リスト")

    ' テーブルの対象範囲を固定のセル範囲に変更
    tbl.Resize Range("B2:D10")

End Sub

最終行を取得して動的に範囲を更新する方法

Sub ResizeTableDynamic()

    Dim tbl As ListObject
    Dim lastRow As Long
    Dim newRange As Range

    Set tbl = ActiveSheet.ListObjects("商品リスト")

    ' 列Cの最終行を取得(空白を除く)
    lastRow = Cells(Rows.Count, "C").End(xlUp).Row

    ' 新しいテーブル範囲(見出し行を含む)
    Set newRange = Range("B2:D" & lastRow)

    ' テーブルの範囲を更新
    tbl.Resize newRange

End Sub

Resize メソッドの仕様と注意点

項目説明
.Resize(新しい範囲)テーブルの範囲を新しいセル範囲に変更します。
必ず見出し行を含めるRange(...)ヘッダーを含むように指定する必要があります。
列数・行数ともに変更可能列数の増減も可能ですが、見出しとの整合性が保たれる必要があります。

応用例:列が動的に変わるケース

列数が可変である場合でも、以下のように処理が可能です。

Dim lastCol As Long
lastCol = Cells(2, Columns.Count).End(xlToLeft).Column
Set newRange = Range(Cells(2, 2), Cells(lastRow, lastCol))

まとめ

Excel VBAのResizeメソッドを活用すれば、既存のテーブル構造を壊すことなく、見出しやスタイル、フィルター設定を保持したままデータ範囲だけを更新できます。
日々変動するデータに柔軟に対応し、自動更新処理を構築したい方には非常に有用なテクニックです。

業務で使用するテンプレートや共有資料をより強化したい場合に、ぜひこの手法を導入してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次