【Excel VBA】よく使うデータが入っている最後の行を取得する方法を紹介

Excel
スポンサーリンク

今回はマクロでよく使うデータが入っている最後の行を取得する方法を紹介したいと思います。

スポンサーリンク

データが入っている最後の行を取得する方法

データが入っている最後の行を取得するには、

  • 最終行からデータが入っている行まで移動
  • 最初の行から最後にデータが入っているセルまで移動

のいずれかを使用することが多いです。

一見どちらも似たようなやり方に見えますが、元のデータによって挙動が変わってくる為、それぞれ特徴と注意点を簡単に説明します。

今回は例として以下のシートを使用します。A1~5セルにそれぞれ名前が入っているやつです。

データが入っている最後の行を取得する方法_1

最終行からデータが入っている行まで移動

まず初めに最終行からデータが入っている行まで移動する方法を紹介します。

コード

Sub haribona_LastRow_xlUp()
    
    Dim lastRow                 As Long
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    MsgBox "データが入っている最後の行は" & lastRow & "行目です。" & vbCrLf & _
           "データ名:" & Cells(lastRow, 1).Value
    
End Sub

実行するとデータが最後に入っている行を取得してメッセージボックスに行数とデータが表示されます。

最終行からデータが入っている行まで移動_コード_1

コードの説明

次にコードについてざっくり説明します。

初めに最終行の数値を格納する為の変数を用意します。今回はlastRowとしました。

Dim lastRow                 As Long

次にlastRowにデータが入った最終行を格納します。

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

と、最終行を格納するコード内に、Rows.CountEnd(xlUp)という見慣れない記述があるのでそれぞれ解説します。

まずRows.Countですが、ざっくり言うとExcelの最大行数(全ての行数)といった感じです。

実際にExcelを開きCtrl+↓キーを押してみると、最終行(1048576行目)まで移動することが出来ます。

最終行からデータが入っている行まで移動_コードの説明_1

コードからもRows.Countの値が”1048576”であることが確認できます。とりあえず、「Rows.Count=1048576」であると覚えておけばOKです(今後Excelのバージョンアップで増えるかもしれませんが・・・)。

最終行からデータが入っている行まで移動_コードの説明_1

次にEnd(xlUp)ですが、これについてざっくり言うとデータが入っているセルまで指定した方向に移動するといった感じです。この場合だとxlUpとしている為、上方向に移動するようになっています。

今回の例だと一番最後のデータがA5セルの「はりぼな ごろう」の為、A5セルまで移動します。

最終行からデータが入っている行まで移動_コードの説明_2

このようにRows.CountEnd(xlUp)を組み合わせることで、データが入っている最後のセルを指定することが出来るわけです。

注意点

この方法を使用する上で注意点があります。

それは不要なデータがあると最終行がうまく取得できない点です。

要は、本来取得したい行より下に必要ないデータが入っていると、そのデータが最終行であると判定されてしまい、想定していた挙動にならなくなってしまいます。

最終行からデータが入っている行まで移動_注意点_1

なので、最終行からデータが入っている行まで移動する方法を使用する場合は、取得する列にいらないデータが入っていないことを確認してから使用するようにしましょう!

最初の行から最後にデータが入っているセルまで移動

次に最初の行から最後にデータが入っているセルまで移動する方法を紹介します。

コード

Sub haribona_LastRow_xlDown()
    
    Dim lastRow                 As Long
    
    lastRow = Cells(1, 1).End(xlDown).Row
    
    MsgBox "データが入っている最後の行は" & lastRow & "行目です。" & vbCrLf & _
           "データ名:" & Cells(lastRow, 1).Value
    
End Sub

実行すると最初に説明した時と同じようにメッセージボックスに行数とデータが表示されます。

最初の行から最後にデータが入っているセルまで移動_コード_1

コードの説明

次にコードについてですが、概ね最初に説明したものと同じなのでポイントだけかいつまんで説明します。

ポイントになるのは最終行を取得する箇所です。

lastRow = Cells(1, 1).End(xlDown).Row
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

最初に説明したものは「最終行→上方向に移動」でしたが、今回はセルの頭(Cells1,1))から下方向(End(xlDown))に移動するようにしています。

今回の例だと一番最後のデータがA5セルの「はりぼな ごろう」の為、A5セルまで移動します。

最初の行から最後にデータが入っているセルまで移動_コードの説明_2

挙動こそ若干違いますが、最初に説明した方法と同じように最終行を取得することが出来ます。こちらの方が動作イメージが付きやすいと思います。

注意点

こちらの方法を使用する上でも注意点があります。

それはデータが虫食いになっているとその行を最終行として取得してしまう点です。

ざっくり言うと、連続してデータが入っていないと途中でストップしてしまうイメージです。

最初の行から最後にデータが入っているセルまで移動_注意点_1

なので、最初の行から最後にデータが入っているセルまで移動する方法を使用する場合は、データが抜けているセルがないか確認してから使用するようにしましょう!

スポンサーリンク

まとめ

今回はよく使うデータが入っている最後の行を取得する方法を紹介しました。

最終行を取得するには、データの形式に応じて以下の方法を使い分けるようにしましょう!

  • データが抜けている可能性がある、該当列に不要なデータが入らないRows.CountEnd(xlUp)を使用する
  • データが全て入力されている、抜け漏れがないEnd(xlDown)を使用する

このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!

コメント

タイトルとURLをコピーしました