【VBA】現在ウィンドウ内に表示されているセル範囲を取得する方法|VisibleRangeの活用

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 を使えば、ユーザーの視界に入っている範囲だけを対象に処理を限定することが可能です。
画面表示に合わせたマクロ処理や、表示部分だけにスタイルを適用したいときに大変便利です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次