Excel VBAでテーブルの見出し行とデータ部を分けて選択する方法|HeaderRowRangeとDataBodyRangeの使い分け

Excelのテーブル(ListObject)には、「見出し行(ヘッダー)」と「データ部」が明確に分かれています。
VBAではそれぞれを個別に取得・操作できるため、見出しだけに書式を適用したり、データ部だけを加工したりといった柔軟な処理が可能です。

本記事では、VBAを使ってテーブルのヘッダー行とデータ行をそれぞれ選択する方法をご紹介いたします。


目次

想定される活用シーン

  • ヘッダーとデータで異なる色や罫線を適用したい。
  • データ部のみを別の処理対象にしたい(コピー・削除など)。
  • 見出し行だけを別シートに複製してテンプレートに活用したい。

VBAコードの例

以下のコードでは、アクティブシート上に存在する先頭のテーブル(ListObject)から、見出し行とデータ部分を順番に選択し、それぞれ確認メッセージを表示しています。

Sub SelectTablePartsSeparately()

    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects(1) ' テーブルのインデックス指定(1つ目)

    ' 見出し行の選択
    tbl.HeaderRowRange.Select
    MsgBox "見出し行を選択しました。", vbInformation

    ' データ部の選択
    tbl.DataBodyRange.Select
    MsgBox "データ部を選択しました。", vbInformation

End Sub

プロパティの解説

プロパティ名説明
.HeaderRowRangeテーブルの見出し行(列名)の範囲を表します。
.DataBodyRangeテーブル内の実データ部分の範囲(見出しや集計行は含まない)

応用例

  • .HeaderRowRange.Font.Bold = True → 見出し行だけ太字にする。
  • .DataBodyRange.Interior.Color = RGB(230, 255, 230) → データ部分に背景色を設定。
  • .DataBodyRange.Copy → データ部だけを他のシートへ転送。

注意点

  • テーブルに**行が一つもない場合(空の場合)**は、.DataBodyRangeNothingになるため、事前にエラートラップやチェック処理が必要です。
  • インデックス指定(ListObjects(1))の代わりに、テーブル名で取得する方法もあります:
Set tbl = ActiveSheet.ListObjects("売上記録")

まとめ

Excel VBAでは、テーブルの見出し行とデータ部を個別に操作することで、表全体ではなく特定部分だけに対して処理を実行できます。
このような柔軟な制御により、表のデザインやデータ管理の効率が大幅に向上します。

テーブルを単なる見た目の整った表としてだけでなく、プログラム的に構造を理解・活用する第一歩として、ぜひ本記事のテクニックをご活用ください。

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

この記事を書いた人

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

目次