1つ下のセルはOffset(1, 0)やCellsやRangeで選択
Offsetプロパティを使うと、基準となるセルから1つ下のセルを選択したり参照することが出来ます。
Offsetプロパティでの隣のセルの考え方は「VBAで隣のセルを参照する」に詳しく書いていますのでご参照ください。
「1つ下」というのは、新しい行に新しいデータを入力する、という事前処理を意味することが多いと思います。
そのため、「1つ下」という意味には、現在位置を示すアクティブセルを基準とする場合と、入力済みのデータの中で一番下を基準とする場合の、大きく2通りが考えられます。
アクティブセルの1つ下であればOffsetプロパティを使って選択できますが、選択範囲の1つ下の場合はOffsetを使うと選択範囲自体が1つ下に移動する形になるため、「1つ下のセル」を選択するのであればOffsetではなくCellsプロパティやRangeプロパティで指定することになります。
ここではそれぞれについて説明します。
アクティブセルの1つ下のセルを選択する
アクティブセルの1つ下のセルを選択するのであれば、以下のように1行で書けます。
1 2 3 |
Sub SelectUnderActiveCell() ActiveCell.Offset(1, 0).Select End Sub |
選択範囲の1つ下のセルを選択する
選択セル範囲の1つ下のセルを選択するのであれば、選択範囲の行数と開始行を加算した値が次の行の位置になります。
ここでは選択範囲の行数+開始行と、列位置を事前に取得して、Cellsプロパティでセル位置を指定してから選択しています。
1 2 3 4 5 6 7 8 9 |
Sub SelectUnderSelection() Dim iRow Dim iCol iRow = Selection.Rows.Count + Selection.Row iCol = Selection.Column Cells(iRow, iCol).Select End Sub |
シートで入力されている最終行の1つ下のセルを選択する
ワークシートで入力済みの範囲の最終行の1つ下のセルを指定するには、「入力済みの範囲」を判定する必要があります。
入力済みの範囲はUsedRangeプロパティで取得することができるため、その範囲の1つ下のセルを指定することで、最終行の1つ下のセルを選択することができます。
ここではコードを短縮するためにRangeオブジェクトの変数rに入力済み範囲のUsedRangeをコピーして書いています。
もちろん変数にコピーせずに、上のサンプルのSelection.Rows.CountのようにActiveSheet.UsedRange.Rows.Countと書いても構いません。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub SelectUnderUsedRange() Dim iRow Dim iCol Dim r As Range Set r = ActiveSheet.UsedRange iRow = r.Rows.Count + r.Row iCol = r.Column Cells(iRow, iCol).Select End Sub |