見出し画像

VBAでRange範囲を扱う

昨日ツイッターで色々と見かけたので、ひとまず書いておこうかなと思います。

データ範囲を Range として扱うにはいろいろな書き方があります。AutoFilter.Range だったり、ListObjects(1).DataBodyRange だったり。ちょこっと書いてみて、やっぱり ListObjects が Range を扱うにあたってもやっぱり使いやすいのかなーとは思いますね。次が CurrentRegionAutoFilterは簡単に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 として扱ったほうがいいでしょうね。より高次元のオブジェクトを使っておく、という意識でしょうか。 

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