今回はマクロでよく使うデータが入っている最後の行を取得する方法を紹介したいと思います。
データが入っている最後の行を取得する方法
データが入っている最後の行を取得するには、
- 最終行からデータが入っている行まで移動
- 最初の行から最後にデータが入っているセルまで移動
のいずれかを使用することが多いです。
一見どちらも似たようなやり方に見えますが、元のデータによって挙動が変わってくる為、それぞれ特徴と注意点を簡単に説明します。
今回は例として以下のシートを使用します。A1~5セルにそれぞれ名前が入っているやつです。
最終行からデータが入っている行まで移動
まず初めに最終行からデータが入っている行まで移動する方法を紹介します。
コード
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
実行するとデータが最後に入っている行を取得してメッセージボックスに行数とデータが表示されます。
コードの説明
次にコードについてざっくり説明します。
初めに最終行の数値を格納する為の変数を用意します。今回はlastRowとしました。
Dim lastRow As Long
次にlastRowにデータが入った最終行を格納します。
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
と、最終行を格納するコード内に、Rows.CountとEnd(xlUp)という見慣れない記述があるのでそれぞれ解説します。
まずRows.Countですが、ざっくり言うとExcelの最大行数(全ての行数)といった感じです。
実際にExcelを開きCtrl+↓キーを押してみると、最終行(1048576行目)まで移動することが出来ます。
コードからもRows.Countの値が”1048576”であることが確認できます。とりあえず、「Rows.Count=1048576」であると覚えておけばOKです(今後Excelのバージョンアップで増えるかもしれませんが・・・)。
次にEnd(xlUp)ですが、これについてざっくり言うとデータが入っているセルまで指定した方向に移動するといった感じです。この場合だとxlUpとしている為、上方向に移動するようになっています。
今回の例だと一番最後のデータがA5セルの「はりぼな ごろう」の為、A5セルまで移動します。
このようにRows.CountとEnd(xlUp)を組み合わせることで、データが入っている最後のセルを指定することが出来るわけです。
注意点
この方法を使用する上で注意点があります。
それは不要なデータがあると最終行がうまく取得できない点です。
要は、本来取得したい行より下に必要ないデータが入っていると、そのデータが最終行であると判定されてしまい、想定していた挙動にならなくなってしまいます。
なので、最終行からデータが入っている行まで移動する方法を使用する場合は、取得する列にいらないデータが入っていないことを確認してから使用するようにしましょう!
最初の行から最後にデータが入っているセルまで移動
次に最初の行から最後にデータが入っているセルまで移動する方法を紹介します。
コード
Sub haribona_LastRow_xlDown()
Dim lastRow As Long
lastRow = Cells(1, 1).End(xlDown).Row
MsgBox "データが入っている最後の行は" & lastRow & "行目です。" & vbCrLf & _
"データ名:" & Cells(lastRow, 1).Value
End Sub
実行すると最初に説明した時と同じようにメッセージボックスに行数とデータが表示されます。
コードの説明
次にコードについてですが、概ね最初に説明したものと同じなのでポイントだけかいつまんで説明します。
ポイントになるのは最終行を取得する箇所です。
lastRow = Cells(1, 1).End(xlDown).Row
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
最初に説明したものは「最終行→上方向に移動」でしたが、今回はセルの頭(Cells1,1))から下方向(End(xlDown))に移動するようにしています。
今回の例だと一番最後のデータがA5セルの「はりぼな ごろう」の為、A5セルまで移動します。
挙動こそ若干違いますが、最初に説明した方法と同じように最終行を取得することが出来ます。こちらの方が動作イメージが付きやすいと思います。
注意点
こちらの方法を使用する上でも注意点があります。
それはデータが虫食いになっているとその行を最終行として取得してしまう点です。
ざっくり言うと、連続してデータが入っていないと途中でストップしてしまうイメージです。
なので、最初の行から最後にデータが入っているセルまで移動する方法を使用する場合は、データが抜けているセルがないか確認してから使用するようにしましょう!
まとめ
今回はよく使うデータが入っている最後の行を取得する方法を紹介しました。
最終行を取得するには、データの形式に応じて以下の方法を使い分けるようにしましょう!
- データが抜けている可能性がある、該当列に不要なデータが入らない→Rows.CountとEnd(xlUp)を使用する
- データが全て入力されている、抜け漏れがない→End(xlDown)を使用する
このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント