「VBA 可視セル Each」
「excel vba 可視セルのみ処理 each」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へ時折アクセスがあります。
Excel VBAで見えているセル(可視セル)を、For Each~Nextループで処理するには、どのようなコードを書けばいいのかを探していた方による検索です。
可視セルをFor Each~Nextループで処理するサンプル
以下のSubプロシージャが参考になるはずです。
Dim rng As Range
For Each rng In ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)
rng.Select
MsgBox rng.Address(False, False)
Next
End Sub
上記のSubプロシージャを実行すると、アクティブなシートの使用されているセル範囲で、可視セルだけが順番に選択され、そのセル番地がメッセージボックスに表示されます。
可視セルをFor Each~Nextループで処理するサンプルについて
例えば、
For Each rng In Range("A1", "G7")
といったFor Each~Nextループを回せば、A1:G7セルに対する処理が可能です。
このコードの「In」の後ろを、可視セルを表すRangeオブジェクトを取得する式にすれば、可視セルだけにFor Each~Nextループ処理を行うコードになります。
具体的には、Rangeオブジェクトに用意されているSpecialCellsメソッドの引数Typeに、
XLCellType列挙型に定義されている定数xlCellTypeVisible(実際の値は12)を指定すれば、
可視セルを表すコレクションとしてのRangeオブジェクトを取得できます。
SpecialCellsメソッドを適用するRangeオブジェクトを取得するコード(「.SpecialCells」の前)は、どの範囲の可視セルを処理したいのかによって変える必要があります。
上記のSubプロシージャでは、Worksheet.UsedRangeプロパティで使われているセル範囲を表すRangeオブジェクトを取得しています。
最終更新日時:2019-10-09 12:06
Home » Excel VBA Rangeオブジェクト » SpecialCellsメソッド » 可視セルのみをFor Each~Nextループで処理する