Excel VBA

End

 対象セル範囲の領域における終端のRangeオブジェクトへの参照を返します。

 言い換えれば、キーボードでの[Ctrl] + [方向キー] (←、→、↑、↓ のいずれか)の操作で移動する先のセルへの参照です。

 どの方向に移動するかは引数Directionで指定します。

構文


Object.End(Direction)

Object
Rangeオブジェクト

 引数Directionで指定する定数(xlDirection列挙隊のメンバ)

定数
内容
キーボード操作
xlUp
-4162
上方向へ移動
Ctrl + ↑
xlDown
-4121
下方向への移動
Ctrl + ↓
xlToLeft
-4159
左方向への移動
Ctrl + ←
xlToRight
-4161
右方向への移動
Ctrl + →

 下記の Sample は、セルA1から隙間無くデータの入力されたリストについて、A列の最終行のセルを選択します。

Sample1


Sub Sample1()
	' セルA1から下方向の終端セルを選択
	Range("A1").End(xlDown).Select
End Sub

 Sample1では、セルA1から下方向の終端セルを取得することで、最終行のデータを特定することができますが、次のようなデータでは問題が発生します。

  1. 項目名だけでデータが無い。
  2. 最終行のデータまでの間に空白行がある。

 1. の場合は、ワークシートの最終行のセルを参照してしまうため、「最終行+1行」(存在しないセル)に新規データを追加するときにエラーが発生します。

 2. の場合は、最終行ではないセルを参照してしまうため、新規データ追加時に既存データを上書きしてしまいます。

 Sample2では、A列の最終行のセルから上方向にデータの終端セルを取得します。

 この方法だと上記の 1. や 2. の場合も最終行のセルを選択できるので、より汎用性が高いでしょう。

Sample2


Sub Sample2()
	' A列の最終行から上方向の終端セルを選択
	Cells(Rows.Count, 1).End(xlUp).Select
End Sub

 1行目の右端セルを選択する場合は、下記のように一番右のセルから左方向に終端セルを取得すれば良いでしょう。


Cells(1, Columns.Count).End(xlToLeft).Select