見出し画像

VBA|ListObject|HeaderRowRange|LISTの見出し行を取得・変更する


■ 基本構文

' 前提:ListObject を取得
Set lo = Worksheets("Sheet1").ListObjects("Table1")

' 見出し行(ヘッダー)
Set rngHeader = lo.HeaderRowRange

戻り値の型・性質

  • Range 型

  • テーブルの 見出し行(1行) を表す

  • 見出し文字列は ListColumns("列名") の参照に影響する


■ サンプルコード

HeaderRowRange の範囲と見出し一覧を確認する
役割:見出し行の範囲を取得し、見出し文字列を列ごとに出力する
理由:列名参照(ListColumns("列名"))の前提文字列を確認するため
注意:見出しの空白・全角半角違いもエラー要因になるため、そのまま確認する

Sub Sample_HeaderRowRange_CheckHeaders()
    Dim lo As ListObject
    Dim c As Range
    
    Set lo = Worksheets("Sheet1").ListObjects("Table1")
    
    Debug.Print lo.HeaderRowRange.Address
    
    For Each c In lo.HeaderRowRange.Cells
        Debug.Print c.Value
    Next c
End Sub

特定の列見出しを変更する(例:1列目)
役割:見出しセルを書き換えて列名を変更する
理由:表の統一(命名ゆれ修正)を自動化するため
注意:見出し変更後は ListColumns("旧名") が参照できなくなるため、処理順に注意する

列名を変えた後に、列名参照でデータ部を更新する
役割:見出し変更→新しい列名で ListColumns を参照する
理由:列名参照を維持するため、最終的な列名に揃えてから操作する
注意:列名参照は完全一致のため、変更後の文字列で参照する

Sub Sample_HeaderRename_Then_UpdateData()
    Dim lo As ListObject
    Set lo = Worksheets("Sheet1").ListObjects("Table1")
    
    '見出しを確定させる
    lo.HeaderRowRange.Cells(1, lo.ListColumns(1).Index).Value = "商品名"
    
    '確定後の列名で参照して更新する
    If lo.DataBodyRange Is Nothing Then Exit Sub
    lo.ListColumns("商品名").DataBodyRange.Value = "りんご"
End Sub

■ 備考

  • HeaderRowRange は 見出し行だけ を返す(データ部は含まない)

  • 見出し文字列は ListColumns("列名") のキーになる

    • 見出しを変えると、列名参照が壊れる(Subscript out of range などの原因)

  • 列名一致はシビア

    • 空白・全角半角・記号も含めて完全一致が必要

  • 見出しを変更する処理がある場合は、以下の順にする

    • 最初に見出しを確定 → その後に列名参照で処理

  • 「見出し名を固定したい」場合は、起動時に見出しをチェックして統一してから処理すると保守性が上がる


いいなと思ったら応援しよう!

Parusの寺小屋 技術メモや学習の整理として書いています。 もし内容が役に立ったり、続きを読みたいと思っていただけたら、 応援として受け取らせてもらえたら嬉しいです。