VBA研修でよくいただくご質問です。
データが日々更新され増減されていくため、最終行の次のセルにデータを貼り付けたい、入力したい、などワークシートの中でデータが入力されている最後が知りたいということです。
まず、キーボードでの操作で考えられるのはCtrl+↓矢印ですね。
これは今選択しているセルから下端まで一気にジャンプするキー操作です。
他には、Ctrl+Shift+矢印キーで選択しているセルから最後のデータがあるところまで範囲選択ができます。また、データ内をクリックした状態でCtrl+Aを押すと表全体が範囲選択できます。(Ctrl+Shift+*も同様)
このように、操作をするだけでも何パターンかやり方があるように、VBAでプログラムを記述する方法も何パターンかあります。
代表的なものをいくつか簡単に紹介します。
下記は、データが1行目から始まる場合はうまくいく方法です。
そうでない場合、データの範囲数が返されるので要注意です。
UsedRnage.Rows.Countではデータの範囲数、すなわちこのような結果になります。
データの終わりは行番号9なのですが、データの総数行が返されてしまいます。
正しい結果が出せるのは以下の方法です。
少々複雑になりますが上の記述ではこのような結果になります。
本来はWithステートメントを使用してすっきりさせることもできますが、今回は敢えてこの記述です。
ひとつだけ注意点は、UsedRangeはデータがなくても罫線が引かれているとそこも含まれてカウントされてしまいます。
その他の方法
途中、空白がある場合はおすすめの方法です。キー操作Ctrl+↓だと空白で止まってしまうため、ワークシート自体の最終行から見て上端という考え方です。列番号の指定が必要です。サンプルは3列目を指定しています。
次は、Ctrl+Shift+矢印キーに相当する方法です。始点を決める必要があります。
最後に、Ctrl+Shift+*に相当する方法です。始点はデータ内であればどのセルでも構いません。
この方法だけは空白で止まってしまうので使えないケースもあります。
どのようなデータなのかで使い分けると良いと思います。
※プログラム名は英語を使用することが多いですが、今回は分かりやすくを日本語にしました。