Excelでマクロを作成しているときに、画面上に見えている範囲だけを対象に処理したいと感じたことはありませんか?
そのようなときに役立つのが、ActiveWindow.VisibleRange
プロパティです。
このプロパティを使うことで、現在のウィンドウ上に表示されているセルの範囲を取得し、さまざまな処理に応用することができます。
目次
基本構文:VisibleRangeで表示範囲のアドレスを取得する
MsgBox ActiveWindow.VisibleRange.Address
解説:
ActiveWindow.VisibleRange
は、現在のウィンドウ内で**表示されているセル範囲(スクロール後の状態含む)**を返します。.Address
によって、**そのセル範囲のアドレス(例:$B$2:$H$20)**を文字列として取得できます。- メッセージボックスで現在の表示範囲を確認できるため、デバッグや選択対象の制限処理に活用可能です。
使用シーンの例
利用場面 | 利用方法 |
---|---|
スクロール位置に応じた処理 | ユーザーの視界内だけに処理を制限したいとき |
可視範囲に色や罫線を適用 | ActiveWindow.VisibleRange.Interior.Color = RGB(...) などで色づけ可能 |
パフォーマンス向上 | 表示範囲に限定することで処理対象を減らし高速化できる場合があります |
応用例①:表示範囲に罫線を引く
Dim viewRange As Range
Set viewRange = ActiveWindow.VisibleRange
viewRange.Borders.LineStyle = xlContinuous
解説:
- 表示されているセルだけを対象にして、枠線を適用しています。
- シート全体ではなく「今見えている部分だけ」に処理したいときに便利です。
応用例②:表示範囲に入力があるセルを抽出
Dim targetRange As Range
On Error Resume Next
Set targetRange = ActiveWindow.VisibleRange.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not targetRange Is Nothing Then
MsgBox "表示範囲内に値が存在するセル:" & targetRange.Address
Else
MsgBox "表示範囲内に定数セルはありません"
End If
解説:
- 表示範囲の中から、実際にデータが入力されているセルだけを抽出しています。
- 表の一部だけを対象としたデータ処理に活用できます。
注意点と補足
内容 | 補足 |
---|---|
非表示の行・列は含まれる | 表示範囲の中にあっても非表示セルは含まれてしまうことに注意してください |
フリーズウィンドウとの関係 | ウィンドウ固定(ウィンドウ枠の固定)を使っていても、見えている範囲全体が対象です |
拡張性あり | .Address の代わりに .Rows.Count や .Columns.Count を使えば、範囲の行数・列数も取得可能です |
まとめ
処理 | 構文 | 説明 |
---|---|---|
表示範囲の取得 | ActiveWindow.VisibleRange | 現在画面に見えているセル範囲 |
アドレスの取得 | .Address | 表示範囲のアドレス(文字列)を取得 |
データ付きセルだけ抽出 | .SpecialCells(xlCellTypeConstants) | 表示範囲内の値が入力されたセルのみ取得可能 |
このように、ActiveWindow.VisibleRange
を使えば、ユーザーの視界に入っている範囲だけを対象に処理を限定することが可能です。
画面表示に合わせたマクロ処理や、表示部分だけにスタイルを適用したいときに大変便利です。