野暮用で。
ポイントはこんな感じ。
- テーブルに名前をつけておく
- 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
んまま、明日への自分へのメモってことで。
