【VBA】Endプロパティでデータの最終行を選択できます

【VBA】Endプロパティ

 End プロパティ を大雑把に説明すると「領域の境界セルを取得するプロパティ」です。実際にマクロを動かして機能を実感してみましょう。

 End プロパティに xlUp を渡すと、下から上方向に領域の境界セルを探します。最初に次のような領域を作成しておきます。

 VBA Endプロパティ 領域を準備

 以下のマクロを実行してみてください。変化を目で追えるように、Application.Wait で処理速度を調整してあります。

Sub Shift_Up()

  Dim i As Long

  Range("D8").Select

  '処理を1秒待つ
  Application.Wait (Now + TimeValue("0:00:01"))

  '選択されているセルにEndプロパティを繰り返し適用する
  For i = 1 To 3
    Selection.End(xlUp).Select
    Application.Wait (Now + TimeValue("0:00:01"))
  Next i

End Sub

 このマクロの処理を追うと ….

 ①セル D8 が選択されます。
 ②上方向に最も近い領域の境界セル D5 へ移動します。
 ③領域内の上端にあるセル D3 へ移動します。
 ④シートの上端にあるセル D1 が選択されます。

 つまり、下図の灰色部分が順に選択されていきます。

 VBA 下から上に順次領域の境界を探索

 End プロパティの引数には xlUp 以外にも xlDown, xlToLeft, xlToRight があって、それぞれ下、左、右方向へ境界セルを探索します。Sub Shift_Up() マクロのに End の引数を色々と変えて試してみてください。

データが入力された最終行のセルを選択する

 End(xlUp) を利用して、データが入力された最終行のセル を選択してみましょう。少し工夫が必要なので、順を追ってマクロを組み立てます。

 ワークシートの行数は Rows.Count プロパティで取得できます。

Sub Rows_Count()
  Debug.Print ActiveSheet.Rows.Count
End Sub
1048576

 ただし、Excel のバージョンによって行数は異なります。1048576 は Excel 2013 で実行して得られた結果ですが、バージョンによらず、

Cells(ActiveSheet.Rows.Count, 4).Select

によって、D 列における行方向の終端セルを選択できます。

Sub Sheet_End_Select()

  Dim r As Long

  'シートの行数をカウント
  r = ActiveSheet.Rows.Count

  'D列の行方向の終端セルを選択
  Cells(r, 4).Select

End Sub

 VBA シートの最終行 (末端セル)

 シートの終端セルに対して End(xlUp) を使うと、データが入力されている最終行のセルを選択できます。

Sub Data_End_Select()

  Dim r As Long

  'シートの行数をカウント
  r = ActiveSheet.Rows.Count

  'データが入力されている最終行のセルを選択
  Cells(r, 4).End(xlUp).Select

End Sub

 VBA データの入力された終端セル

コメント

タイトルとURLをコピーしました