見出し画像

[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行目・・・とデータを追加させていくプログラムを作ることが可能です。

この最終行の取得はこれ以外にも、範囲の選択をさせる際にも活用することもできますので、さまざまな使い方ができるかと思います。

ぜひ、ご活用ください!

この記事が気に入ったらサポートをしてみませんか?