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
→ データ部だけを他のシートへ転送。
注意点
- テーブルに**行が一つもない場合(空の場合)**は、
.DataBodyRange
がNothing
になるため、事前にエラートラップやチェック処理が必要です。 - インデックス指定(
ListObjects(1)
)の代わりに、テーブル名で取得する方法もあります:
Set tbl = ActiveSheet.ListObjects("売上記録")
まとめ
Excel VBAでは、テーブルの見出し行とデータ部を個別に操作することで、表全体ではなく特定部分だけに対して処理を実行できます。
このような柔軟な制御により、表のデザインやデータ管理の効率が大幅に向上します。
テーブルを単なる見た目の整った表としてだけでなく、プログラム的に構造を理解・活用する第一歩として、ぜひ本記事のテクニックをご活用ください。