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メソッドを活用すれば、既存のテーブル構造を壊すことなく、見出しやスタイル、フィルター設定を保持したままデータ範囲だけを更新できます。
日々変動するデータに柔軟に対応し、自動更新処理を構築したい方には非常に有用なテクニックです。
業務で使用するテンプレートや共有資料をより強化したい場合に、ぜひこの手法を導入してみてください。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
