VBAでRange範囲を扱う
昨日ツイッターで色々と見かけたので、ひとまず書いておこうかなと思います。
データ範囲を Range として扱うにはいろいろな書き方があります。AutoFilter.Range だったり、ListObjects(1).DataBodyRange だったり。ちょこっと書いてみて、やっぱり ListObjects が Range を扱うにあたってもやっぱり使いやすいのかなーとは思いますね。次が CurrentRegion。AutoFilterは簡単にOn/Offができてしまうし、ちょっと使いづらい印象。
Sub オートフィルタで範囲指定()
Dim af: Set af = Me.AutoFilter.Range
Dim i
For i = 2 To af.Rows.Count
Debug.Print af(i, 1), af(i, 2), af(i, 3)
Next
End Sub
Sub テーブルで範囲指定()
Dim li: Set li = Me.ListObjects(1).DataBodyRange 'テーブル名指定できるのがいいですね!'
Dim i
For i = 1 To li.Rows.Count '1から始まるのがいいですね!'
Debug.Print li(i, 1), li(i, 2), li(i, 3)
Next
End Sub
とは言いつつ、ListColumns("...") でカラム名を使って取得できたりするし、結局は Dim li As ListObject として扱ったほうがいいでしょうね。より高次元のオブジェクトを使っておく、という意識でしょうか。