指定した列の可視セルを表すオブジェクトをVBAで取得するには、どのようなコードを書けばいいのかを疑問に感じる方は少なくないようです。
上図のようなデータがあるときの例を考えてみましょう。
C列の性別でフィルターをかけ、
A列の可視セルを表すExcel.Rangeオブジェクトを取得するには、
どのようなコードを書けばいいのかということです。
可視セルのコピーは簡単だが…
コピーするだけなら、以下のコードで済んでしまいます。
Range("A1").CurrentRegion.Columns("A").Copy
上記のコードを実行した直後に、例えばA11セルを選択してショートカットキー[Ctrl]+[V]を押せば、下図のようにA列の可視セルだけが貼り付けできます。
ところが以下のコードを実行すると、
Dim rng As Range Set rng = Range("A1").CurrentRegion.Columns("A") MsgBox rng.Address(False, False)
メッセージボックスには「A1:A6」と表示されてしまいます。
「Range("A1").CurrentRegion.Columns("A")」だけでは、可視セルを表すRangeオブジェクトが取得できているわけではないということです。
コピーをした場合には、都合よく処理してくれているだけです。
指定列の可視セルのみを表すRangeを取得・選択するサンプルマクロ
以下のExcelマクロを実行した場合には、可視セルのアドレスだけがメッセージボックスに表示されます。
Dim rng As Range
Set rng = _
Range("A1").CurrentRegion.Columns("A").SpecialCells(xlCellTypeVisible)
MsgBox rng.Address(False, False)
End Sub
Range.SpecialCellsメソッドの引数に定数xlCellTypeVisibleを指定するオブジェクト式を組み合わせれば、「Range("A1").CurrentRegion.Columns("A")」で取得できている「A1:A6」セルの中の可視セルを表すRangeオブジェクトのみを取得できます。
Home » Excel VBA Rangeオブジェクト » SpecialCellsメソッド » 指定列の可視セルのみを表すRangeを取得・選択するには