VBAでExcelシートの最終行を求める方法についてご説明します。
シートに入力されているデータの終端を求める場合、扱いたいデータの特性について把握しておく必要があります。
以下、詳しく解説いたします。

シート全体の最終行を求める方法

<コード>

MsgBox "最終行:" & Rows.Count & vbCrLf & _
    "最終列:" & Columns.Count

<実行例>

Rows.Countでシートの縦方向のセルの数(行数)を、Columns.Countで横方向のセルの数(列数)を求めることができます。
ここではExcelのバージョンにより最大行数・列数が異なる点に注意しましょう。
ちなみにExcel2003では65536行・256列、Excel2007では1048576行・16384列となります。
Rows.CountやColumns.Countを使用してあらかじめバージョンの違いを想定した柔軟なコードを組んでおくと安心ですね。

ブランクの無いデータについて最終行を求める方法

表の1列目から最終行まで何らかの値が入力されているデータの場合、下記のコードで最終行を求めることができます。
このコードは基準となるセル(A1)を選択してCtrl+↓キーを押した場合(xlDown)と同じ動作をします。
ちなみに、基準となるセルから右方向へ最終列を求める場合、引数をxlToRightにします。
<コード>

   MsgBox "最終行:" & Range("A1").End(xlDown).Row & vbCrLf & _
   "最終列:" & Range("A1").End(xlToRight).Column

<実行例>

ブランクが発生する可能性のあるデータについて最終行を求める方法

ところで、先ほどの例では表の途中にブランクのあるデータが存在する場合、そこで行のカウントが止まってしまうという欠点があります。
<実行例>

このような場合、シート全体の最終行から上に向かってデータの最終行を求めるという方法があります。
<コード>

Dim MaxRow As Long, MaxCol As Long
MaxRow = Rows.Count: MaxCol = Columns.Count
   MsgBox "最終行:" & Cells(MaxRow, 1).End(xlUp).Row & vbCrLf & _
   "最終列:" & Cells(1, MaxCol).End(xlToLeft).Column

<実行例>

ところで、このコードにも1つ難点があります。シートの最終行までデータが埋まっているような場合は
Ctrl+↑キーを押したときと同様に連続してデータが入力されているセルの上端までカーソルが移動してしまうのです。
そこで、このようなパターンを想定してIF文で処理をしておく必要があります。
<コード>

Dim MaxRow As Long, MaxCol As Long	‘シートの最終行・最終列を格納’
Dim target_Row As Long, target_Col As Long	‘データの最終行・最終列を格納’
MaxRow = Rows.Count: MaxCol = Columns.Count
If Cells(MaxRow, 1) = "" Then
    target_Row = Cells(MaxRow, 1).End(xlUp).Row
Else	‘シートの最終行にデータが入力されている場合’
    target_Row = MaxRow
End If
If Cells(1, MaxCol) = "" Then
    target_Col = Cells(1, MaxCol).End(xlToLeft).Column
Else	‘シートの最終列にデータが入力されている場合’
    target_Col = MaxCol
End If
   MsgBox "最終行:" & target_Row & vbCrLf & _
   "最終列:" & target_Col

まとめ

Excelシート上のデータの最終行を求めるためにはデータのブランクの有無や
シートいっぱいにデータが入力されている場合など色々なパターンを考慮しておくことが大切です。
データの特性について知り、状況の変化にも対応できる柔軟なコードを組むようにしましょう。
【おすすめ記事】
習得必須!VBAを教われるスクールBEST5
VBAの本・参考書の評判
業務効率をアップする!コピペで動くVBA5選
【VBA入門】Msgboxでメッセージボックスを活用する方法