[Excel VBA]データの最終行の取得
Excelをデータベースとして使う
Excelについて、普段どのような使い方をされているでしょうか?
請求書の元データとして、発送先の郵便番号、住所、氏名などを収集されたり、はたまた請求データの一覧を作成したり、そのような使い方をすることが多いのではないでしょうか?
その際に入力フォームをシート上に作ったり、ユーザーフォームを使ったりして、登録する情報を入力させる枠を作り、「登録」ボタンを押せば、データベースに反映させる、といったプログラムを作ることがあると思います。
その時に、データベースについては、新しい行にデータを追加していくと思いますが、その際、どうやって最終行って取得するのでしょうか?
最終行は下から探すのが間違いが少ない
Excelの機能としては、端っこのデータまで飛ぶ、という機能があります。
ご存知の方もいるとは思いますが、Ctrl + 矢印を押すとこれだけでデータが連続している端っこまでセルの選択が移動します。
そのため、例えばA列にはデータが全ての行に入っている(データが入っている最終行まで空白のセルがない)場合、A1を選択した状態で、Ctrl + ↓とすると、A列の一番最後の行の「セルが選択」されます。
ぜひ、一度Excel上で試してみてください!
この仕組みを利用して、最終行を取得したいと思いますが、上からこの方法を取ると問題が出てくることがあります。
それは、途中で「空白」セルがないか?
ということです。空白セルがあると、Ctrl + 矢印はあくまで、「連続したデータの端っこ」のセルを選択するので、その「空白」セルの一つ手前のセルを選択してしまい、「空白」よりも下のセルがあったとしても、無視されてしまいます。
Excelの最終行からデータの最終行を把握する
それでは、上からでなければ、どこから判断するかというとExcelの最終行から、上に向かってCtrl + ↑をすることで「一番最初にデータがあるセル」が選択されます。
Excelの最終行はExcel2007以降は1,048,576行になっているので、例えばA50までデータが入っているようであれば、
A1048576のセルから上に向かってCtrl + ↑でA50が選択されます。
この特性を活かして、プログラムを書くとすると、
Cells(Rows.Count,1).End(xlup)
このようにRows.CountでExcelの行数を数えるので、1,048,576行で、
Cells(1048576,1)はA1048576(ExcelのA列の最終セル)を表しており、
End(xlup)はCtrl + ↑と同様の動作をしてくれます。
そうなると上記の作業をするとA50が選択されます。
これで最終行の「セル」が選択できたので、さらに「.Row」を加えることで、「最終行」を取得させることができます。
Cells(Rows.Count,1).End(xlup).Row
これで50行目が取得されるので、これを変数に入れるなり、そのまま使うなり、「+1」とすることで51行目を選択させることができるので、これを活用することで、51行目、52行目・・・とデータを追加させていくプログラムを作ることが可能です。
この最終行の取得はこれ以外にも、範囲の選択をさせる際にも活用することもできますので、さまざまな使い方ができるかと思います。
ぜひ、ご活用ください!
この記事が気に入ったらサポートをしてみませんか?