3-4.セルの参照いろいろ①

Rangeオブジェクトの取得について、3-1.セルのオブジェクトでRangeプロパティやCellsプロパティなどをご紹介しました。
そこでは、セル番号や行列番号を指定する方法をご紹介しましたが、今回はそれ以外のRangeオブジェクトの取得方法について、ご紹介します。

Offsetプロパティ

○構文
Range.Offset(行方向の移動量,列方向の移動量)

○処理
Rangeを基準として、指定した移動量分、行列方向に移動した位置のRangeオブジェクトを取得します。
移動量に正の値を指定した場合、行は下方向、列は右方向に移動
    負の値を指定した場合、行は上方向、列は左方向に移動
    0または省略した場合、移動しない

Sub Offsetプロパティのサンプルコード()
    
    '左隣のセルの値をコピー
    '単一セルの場合
    Range("B1").Value = Range("B1").Offset(, -1).Value
    '複数セルの場合
    Selection.Value = Selection.Offset(, -1).Value
    
End Sub

複数セルの場合、下図のように、範囲内のセルそれぞれから見て一つ左のセルの値を参照します。

Resizeプロパティ

○構文
Range.Resize(変更する行数,変更する列数)

○処理
Rangeを基準として、指定した行列数分、行列方向にセルサイズを変更したRangeオブジェクトを取得します。
行数・列数に1を指定すると、元のRangeの位置を返します。

Sub Resizeプロパティのサンプルコード()

    'A1~A5セルに値を入力
    Range("A1").Resize(5, 1).Value = "Sample"
    
End Sub

Endプロパティ

○構文
Range.End(方向)

○処理
Rangeを基準に、指定した方向に向かって、データが入力されている最後のセルを取得します。

○パラメーター
方向に指定するパラメーターは、下表に示すxlDirection列挙体のいずれかです。

方向処理内容
xlUp上方向のセルを取得
xlDown下方向のセルを取得
xlToRight右方向のセルを取得
xlToLeft左方向のセルを取得

Endプロパティは、ショートカットキー Ctrl + 矢印キー と同じ挙動をします。
また、Range.End(xlUp).End(xlUp)や、Range.End(xlUp).End(xlToRight)のように、Endを繰り返すことができます。

Sub Endプロパティのサンプルコード()

    'データが入力されている最後の行を取得
    Cells(1, 1).End(xlDown).Row
   
    'データが入力されている最後の列を取得
    Cells(1, 1).End(xlToRight).Column

End Sub

なお、上記のコードの場合、途中で1つでも空白のセルがあると、その手前のセルを取得してしまうので、最後の行・列を取得することができません。

その場合は、下記のコードのように、最終行・最終列のセルを基準としてEndプロパティを使用すると良いです。
なお、最終行のセルはCells(Rows.Count,1)、最終列のセルはCells(1,Columns.Count)で取得できます。

Sub Endプロパティのサンプルコード2()

    'データが入力されている最後の行を取得
    Cells(Rows.Count, 1).End(xlUp).Row
   
    'データが入力されている最後の列を取得
    Cells(1, Columns.Count).End(xlToLeft).Column

End Sub

Endプロパティは、繰り返し処理の際に、ほぼ必須で使用するプロパティですので、ぜひ覚えていただけると便利です。

コメント