なぜこの技術が重要なのか
Excelで大量のデータを取り扱う際、マクロを実行した後に「目的のセルが画面外に隠れてしまい、どこにあるか分からない」という経験はありませんか?ユーザーが操作する際、わざわざスクロールバーを動かして目的の場所を探させるのは不親切です。
本記事で紹介するプロパティを活用すれば、マクロの処理終了後に、自動的に目的のセルを画面の左上端へ移動させることができます。これにより、UI/UXを向上させ、ユーザーが即座に作業を開始できる「気の利いたマクロ」に仕上げることが可能になります。
基礎知識:ScrollRowとScrollColumnとは
Excelのウィンドウ表示を制御するために、Windowオブジェクトが持つScrollRowプロパティとScrollColumnプロパティを使用します。
・ScrollRow:ウィンドウの最上段に表示したい「行番号」を指定します。
・ScrollColumn:ウィンドウの最左端に表示したい「列番号」を指定します。
これらをActiveWindowオブジェクトに対して設定することで、シートのスクロール位置をプログラムから強制的に変更できます。
実装のポイント
通常、セルを選択するだけ(Selectメソッド)では、そのセルが画面内に入るようにExcelが自動調整しますが、必ずしも「左上端」に来るとは限りません。画面の特定位置に固定したい場合は、今回のプロパティを組み合わせるのが最も確実です。
サンプルプログラム
以下のコードは、指定したセルを選択し、そのセルが画面の左上端に来るようにスクロールさせる実用的な例です。
Sub MoveActiveCellToTopLeft()
‘ 対象となるセルを指定
Dim targetCell As Range
Set targetCell = Range(“D6”)
‘ セルを選択状態にする
targetCell.Select
‘ ウィンドウの表示位置を調整する
‘ ActiveWindowは現在アクティブなウィンドウを指します
With ActiveWindow
‘ スクロール位置をアクティブセルの行・列に合わせる
.ScrollRow = ActiveCell.Row
.ScrollColumn = ActiveCell.Column
End With
MsgBox “セル ” & targetCell.Address(False, False) & ” を左上端に表示しました。”
End Sub
応用と注意点
1. Gotoメソッドを使った簡潔な書き方
上記の処理は、ApplicationオブジェクトのGotoメソッドを使うと、より一行でシンプルに記述できます。
Application.Goto Reference:=Range(“D6”), Scroll:=True
この方法は記述が非常に短く済むため、現場でもよく利用されます。
2. 注意点:ウィンドウ枠の固定
シートで「ウィンドウ枠の固定」が有効になっている場合、ScrollRowやScrollColumnの挙動が制限されることがあります。固定されている範囲より上の行や左の列を指定しても、表示位置は変わりません。
3. 画面更新の抑制
マクロ実行中に画面がチラつくのを防ぐために、処理の冒頭で「Application.ScreenUpdating = False」を入れることが一般的ですが、ScrollRow等の処理を行う直前に一旦「True」に戻すか、あるいは更新抑制を行わない方が、視覚的な移動がスムーズに伝わる場合もあります。状況に合わせて使い分けてください。
