Excel VBAメモ テーブルの挿入で作ったテーブルを名前で見つけて内容を取得してみる

VBA

野暮用で。
ポイントはこんな感じ。

  • テーブルに名前をつけておく
  • SheetオブジェクトのテーブルコレクションListObjectsからテーブルListObjectを取得する
  • テーブルの名前はNameプロパティを参照する
  • テーブルのセルの値はListObjectのRangeに行番号と列番号を指定することで取得できる

作ったシートはこんな感じ。
シートは1つでテーブルはMainTableって名前にした。

んで、コードはこんな感じ。
テーブルを検索するシートは表示しているシート"ActiveSheet"ってことにしてある。

Private Sub Method()

    ' 変数を定義する
    Dim objListObject As ListObject
    Dim objColumn As ListColumn
    Dim objRow As ListRow
    Dim nHeader As Integer
    Dim nRow As Integer
    Dim nColumn As Integer
    
    ' 変数を初期化する
    Set objListObject = Nothing
    Set objColumn = Nothing
    Set objRow = Nothing
    strName = "MainTable"
    nHeader = 0
    nRow = 0
    nColumn = 0

    '
    ' テーブルの値をイミディエイトウィンドウに表示する
    '
    On Error GoTo MethodEnd
        ' 途中でループを抜けたいのでDo...Loop Whileを使う
        Do
            ' アクティブシートの中にあるテーブルを名前で検索する
            For Each objListObject In ActiveSheet.ListObjects
                ' 取得したいテーブルの名前と一致するかチェックする
                If objListObject.Name = strName Then
                    ' 目的のテーブルなので検索を終了する
                    Exit Do
                End If
            Next
        Loop While False
        
        ' 見出しの行番号を取得する
        nHeader = objListObject.HeaderRowRange.Row
           
        ' テーブルの内容をイミディエイトウィンドウに表示する
        For Each objRow In objListObject.ListRows
            ' 見出し行のときは処理をスキップしたいのでDo...Loop Whileを使う
            Do
                ' 処理中の行番号を取得する
                nRow = objRow.Index
                ' 見出し行かチェックする
                If nRow = nHeader Then
                    ' 見出し行は表示したくないので次の行へ処理をスキップする
                    Exit Do
                End If
                ' 値をイミディエイト出力する
                For Each objColumn In objListObject.ListColumns
                    ' 処理中の列番号を取得する
                    nColumn = objColumn.Index
                    ' イミディエイトウィンドウに行列番号とセルの値を表示する
                    Debug.Print "[" & nRow & "," & nColumn & "]" & objListObject.Range(nRow, nColumn)
                Next
            Loop While False
        Next
    
MethodEnd:

    ' オブジェクトを開放する
    If Not objColumn Is Nothing Then
        Set objColumn = Nothing
    End If
    If Not objRow Is Nothing Then
        Set objRow = Nothing
    End If
    If Not objListObject Is Nothing Then
        Set objListObject = Nothing
    End If

End Sub

で、実行してみるとこんな感じ。
“[行番号,列番号]セルの値"ってなことで表示しとる。

[2,1]1
[2,2]Apple
[2,3]100
[3,1]2
[3,2]Lemon
[3,3]80
[4,1]3
[4,2]Orange
[4,3]120
[5,1]4
[5,2]Grape
[5,3]200

んまま、明日への自分へのメモってことで。