シートの最終セルを選択

SpecialCells(xlCellTypeLastCell)メソッドを使用すると、シートの最後のセルを取得できます。注意点があります

'シートの最終セルを選択する
Cells.SpecialCells(xlCellTypeLastCell).Select

シートの使用されている最終セルを取得するには「SpecialCells」メソッドに引数「xlCellTypeLastCell」を指定します

シートの最終セルとは、なんらかの設定の行われた最右下のセルです
入力値だけでなく書式設定などでも対象となります

ただ、使用時の注意点がありますので後述します

コード実行時の動き

シートの使用済み最終セルを選択状態にする
コード実行時の動き
Cells.SpecialCells(xlCellTypeLastCell).Select

コードを実行すると画像の様に書式設定されている最後のセルが選択状態になります

これを使用すれば、データベースの表に入力する際に最終行を調べるのが非常に簡単に行えます

Endメソッドによる移動は空白セルに影響をうける可能性がありますが、こちらは確実に最終行を取得することができますし、1行ステートメントなので処理も速いです

メソッドの注意点(未保存)

しかし、このメソッドは注意点がいくつかあります

まず、大きな注意点としてこのメソッドは最後に保存された状態の最後のセルを取得します

つまり、未保存の状態のセル範囲には対応できません

保存をしていないとうまく取得できない動き
未保存だとうまく取得されない
Cells.SpecialCells(xlCellTypeLastCell).Select
Range("C:D").Delete
Range("A1").Select
Cells.SpecialCells(xlCellTypeLastCell).Select

画像とコードを確認してください

まず、最初にメソッドを実行します
この時点では黄色セルの最終セルが選択状態になっています

その後に、C・D列を削除してA1セルをアクティブ状態に戻します
そして再度実行すると、今度は黄色セルではないセルが選択状態になっています

このセルは削除前に最後のセルとして認識されていたセルになります
削除を実行した後に保存が実行されていないため、最後のセルのデータも更新されていないため同じセルが選択されてしまっています

この動きがあるため、削除を実行するような処理の場合にメソッドを使用するには必ず先に保存を実行しておく必要があります

メソッドの注意点(書式設定)

次に、書式設定を行っただけで最後のセルの判定に含まれると解説しました
実際に黄色セルが選択されていることを確認しましたので間違いありません

しかし、ここでも注意しなければいけない動作をします

例えば、よくデータベースの表で列に入力するデータが固定のため
列をまるごと決まった書式設定を行うことがあります

その際に、列をまるごと選択して実行するか
範囲指定をして、予備範囲までを設定するかで変わります

端を含めるかで対象が変化する動き
書式設定での動きの変化

コードが少し長いので、画像で確認してください

まず、最初にA列全体に対して「,」の表示形式を設定しています
その状態で最後のセルを取得するとB列の最後の行が選択されます

これが想定していた動きになります

次に、A列を削除してB列のデータをA列に移動します
そして、今度はA列全体ではなくA1からA10000までのセルに対して同じ表示形式の設定を行います
この状態で最後のセルを選択すると、B10000が選択されます

未保存であるためB列になる理由は解説しました
そして、A列の書式設定を行った範囲に対して最後のセルが認識されてしまう動きになっています

これは想定通りの動きではありません

つまり、行全体のように端を含むような書式設定はその行の標準設定となるため
使用済みセルと認識されることがなくなる
わけです
列方向に関しても同様です

要は、セル全体に背景色を設定したとしてもセル全体が使用済みセルとして認識されるわけでは無い、ということです

列や行の選択を知らず、とりあえず途方もないセル範囲に予備の書式設定を行ってしまっているようなワークシートにはほんまに要注意です

こういった注意点を踏まえて考えると、データの取得のみを行う表データで最終セルを取得するには適していますが、加工を行う表で使用するには適していないかもしれません

その場合は、UsedRangeプロパティの方がいいかもしれません
それを使用した最終セルの選択方法は以下の記事にあります