アクティブセルはActiveCellプロパティを利用する
アクティブセルを表すプロパティとしてActiveCellプロパティがあります。
アクティブセルは黒い枠線で囲まれた選択範囲の中で、白抜きになっているセルのみが対象になります。
以下の画像では赤枠部分がアクティブセルになります。
アクティブセルは必ず1つのセルに限定され、複数のセルが同時にアクティブセルとして扱われることはありません。
ActiveCellプロパティはRangeオブジェクトを返します。
そのため、ActiveCellのあとにドット(.)を入力すると、Rangeオブジェクトのメソッドやプロパティが入力候補として表示されます。
ActiveCellの親オブジェクト
ActiveCellプロパティはグローバルメンバーとして登録されているため、親オブジェクトを省略して書くことができますが、WindowオブジェクトやApplicationオブジェクトの子プロパティとしても登録されています。
Windowオブジェクトについては以下をご参照ください。
・VBAでアクティブウィンドウを参照する
・VBAでウィンドウを参照する
そのため、以下のように状況に合わせた書き方が可能です。
1 2 3 4 5 6 7 8 9 10 11 |
Sub ActiveCellTest() ActiveCell.Select ActiveWindow.ActiveCell.Select Windows(1).ActiveCell.Select Application.ActiveCell End Sub |
アクティブセルの座標や行や列の位置
セルの位置を表す場合はActiveCell.Addressプロパティが便利です。
Addressプロパティには引数を設定することで座標の形式を変えることが出来ます。
また、行位置はRowプロパティ、列位置はColumnプロパティで取得できます。
各プロパティの詳細については以下を参照ください。
・セルのアドレスを取得する
・セルの行番号や列番号を取得する
以下はC5セルをアクティブセルにしたあとにAddressプロパティ、Rowプロパティ、Columnプロパティを使う例です。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub ActiveCellAddressTest() Range("C5").Activate Debug.Print ActiveCell.Address '// $C$5 Debug.Print ActiveCell.Address(True, False) '// C$5 Debug.Print ActiveCell.Address(False, True) '// $C5 Debug.Print ActiveCell.Address(False, False) '// C5 Debug.Print ActiveCell.Row '// 5(行位置) Debug.Print ActiveCell.Column '// 3(列位置) End Sub |
ActiveCellプロパティをRangeオブジェクトに代入して使う
ActiveCellプロパティをそのまま使ってもRangeオブジェクトとして利用できるため問題ありませんが、Range型の変数に代入して利用したい場合などは以下のようにコードを書きます。
1 2 3 4 5 6 7 |
Sub ActiveCellToRangeTest() Dim r As Range Set r = ActiveCell Debug.Print r.Address End Sub |