Home » Excel VBA Rangeオブジェクト » SpecialCellsメソッド » 指定列の可視セルのみを表すRangeを取得・選択するには

指定列の可視セルのみを表すRangeを取得・選択するには

動作検証バージョン:Windows 11 Home + 64bit Excel バージョン 2503(ビルド18623.20156クイック実行)

指定した列の可視セルを表すオブジェクトを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マクロを実行した場合には、可視セルのアドレスだけがメッセージボックスに表示されます。

Sub 指定列の可視セルのみを表すRangeを取得する()
 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を取得・選択するには

「SpecialCellsメソッド」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.