VBAでテーブル化した情報を取得して開発につかってみよう
テーブル化したデータならもっと速く開発できるんじゃね?

と思い、使いそうなものをコード化してみた。今回のコードをつかってあなたもVBAで早く開発できるようにしてみよう。

テーブル化したヘッダー情報の取得

  • ヘッダー名リスト(2次元配列)を取得する
  • ヘッダーの範囲を取得する
  • ヘッダーがあるセル行番号を取得する
  • ヘッダーのセル最終列を取得する

と、まあヘッダーで使いそうなものをまず4つ。それぞれコードをコピペしてつかってくれ。

ヘッダー名リスト(2次元配列)を取得する

' シートオブジェクト名: DataSheet, テーブル名: testTable
Dim header_name_lists As Variant
header_name_lists = DataSheet.ListObjects("testTable").HeaderRowRange

' -- Results --
' header_name_lists(1, 1) "name"
' header_name_lists(1, 2) "age"

ヘッダーの範囲を取得する

' シートオブジェクト名: DataSheet, テーブル名: testTable
Dim header_range As String
header_range = DataSheet.ListObjects("testTable").HeaderRowRange.Address

' -- Result --
' $A$1:$B$1

ヘッダーがあるセル行番号を取得する

' シートオブジェクト名: DataSheet, テーブル名: testTable
Dim header_row As Long
header_row = DataSheet.ListObjects("testTable").HeaderRowRange.Row

' -- Result --
' 1

ヘッダーのセル最終列を取得する

' シートオブジェクト名: DataSheet, テーブル名: testTable
Dim last_header_column As Variant
last_header_column = DataSheet.ListObjects("testTable").HeaderRowRange.Count

' -- Result --
' 2

テーブル化したデータ情報の取得

  • データリストを2次元配列として取得する
  • データが挿入されている最初のセル行番号を取得する
  • データが挿入されている最後のセル行番号を取得する

ここでは実際のデータ情報と、つかいそうな行番号を取得していく。

データリストを2次元配列として取得する

' シートオブジェクト名: DataSheet, テーブル名: testTable
Dim data_lists As Variant

With DataSheet.ListObjects("testTable")
    
    If Not .DataBodyRange Is Nothing Then
        data_lists = .DataBodyRange
    End If

End With

' -- Results --
' data_lists(1, 1) "さいとう"
' data_lists(1, 2) 29

データが挿入されている最初のセル行番号を取得する

' シートオブジェクト名: DataSheet, テーブル名: testTable
Dim first_row As Long

With DataSheet.ListObjects("testTable")
    
    If Not .DataBodyRange Is Nothing Then
        first_row = .DataBodyRange.Row
    Else
        first_row = 0
    End If

End With

' -- Result --
' 2

データが挿入されている最後のセル行番号を取得する

' シートオブジェクト名: DataSheet, テーブル名: testTable
Dim last_row As Long
    
With DataSheet.ListObjects("testTable")
        
    If Not .DataBodyRange Is Nothing Then
        Dim data_lists As Variant: data_lists = .DataBodyRange
        Dim header_row As Long: header_row = .HeaderRowRange.Row
            
        If UBound(data_lists) = 1 Then
            last_row = 1 + header_row
        Else
            last_row = UBound(data_lists) + header_row
        End If
            
    Else
        last_row = 0
    End If
    
End With

' -- Result --
' 40