VBAで処理を 最終行まで繰り返す うえで重要なポイントについて解説します。
For Next、While、For Eachを使って「最終行まで繰り返す」という処理はよくありますが、その際に必要なのが「最終行の取得」です。
今回は処理を最終行まで繰り返すために必要な最終行の取得方法にフォーカスします。
処理を最終行まで繰り返す
繰り返し処理そのものの方法については、For Next や While など、VBA初心者にもわかりやすい方法が複数存在します。
ただ、「最終行まで繰り返す」となると、データの「最終行」ってどうやって知ることができるのでしょうか?
Excelシートの最大行数
まず、データが入力されている最終行を求める前に、そもそも Excelシートの行は何行あるのでしょうか?
昨今のExcelでは、1,048,576行あります。
Excel2007以降: 1,048,576行
みなさんが使用している Excelの最大行数を確認するには、Ctrl + ↓(下向き矢印)キーを押すと一番下の行にジャンプします。
VBAで最終行を取得するコード
では、最終行を求めるVBAのコードを紹介します;
赤字の Rows.Count の部分が Excelシート全体の行数を表します。
つまり、Excel2003であれば 65,536行、Excel2007以上であれば 1,048,576行ということです。
Cells(Rows.Count, 1) はつまり、A列の最終行のセルを指します。A65536 あるいは A1048576 です。
ここから Endモードで一気にデータが入っている行まで上にジャンプするのが .End(xlUp)ということ。
最後の .Row が「そのセルの行」という意味で、つまり データの入力されている最終行 ということになります。
理屈を理解するのが面倒な方は、コードだけ覚えておけばひとまず目の前の課題は解決ですね。
変数に最終行を代入する実践的使用例
ではここで VBAの使用例を紹介します。
上の表でデータの入っている最終行をVBAを使って求めます。
Option Explicit
'*********************************************************
' データ最終行の取得 Get_LASTROW
'*********************************************************
Sub Get_LASTROW()
Dim LASTROW As Long
' 最終行の取得
LASTROW = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox LASTROW & " 行目が最終行です。"
End Sub
'-----------------<< End of Source >>------------------
上のサンプルは、LASTROW という変数に、データの最終行番号を代入してメッセージボックスに表示するコードです。
このマクロを実行すると;
このように「5行目」と正しく最終行を返します。
最終行を取得して処理を繰り返す
VBAで最終行まで繰り返す
上のサンプル表の氏名に、その末尾に「様」の文字列を追加する コードです。
さきほどのコードを応用すれば氏名が入力されているセルだけ的確に「様」を追加することが可能です。
For Next を使用した場合のコードはこうなります;
Option Explicit
'*********************************************************
' データ最終行の取得 Get_LASTROW
'*********************************************************
Sub Get_LASTROW()
Dim LASTROW As Long
' 最終行の取得
LASTROW = Cells(Rows.Count, 1).End(xlUp).Row
' 最終行まで繰り返す
For i = 2 To LASTROW
Cells(i, 1).Value = Cells(i, 1).Value & " 様"
Next
MsgBox "処理が完了しました。"
End Sub
'-----------------<< End of Source >>------------------
▲’ 最終行まで繰り返す 以下、For Next が 最終行まで繰り返すコード
これを実行すると;
上のように、セルA2 からセルA5 まで「 様」が入力されました。
VBAで最終行を取得できないという方へ
「最終行を取得できない」という方は、Excelシートのデータエリアの「列」をあらためてチェックしてみてはいかがでしょうか。
例えば 下のようなシートの場合、データエリアはA列ではなくB列から始まっています。
それなのに、Cells(Rows.Count, 1).End(xlUp).Row と、コードを書いても動きません。
赤字で書いた「1」は A列を指しています。
B列をチェックさせたいのならば、Cells(Rows.Count, 2).End(xlUp).Row と書かなければいけません。
以上、『VBAで処理を最終行まで繰り返す方法』でした。
関連記事・広告
併せて読んでおくと便利
VBAで最終行を取得する方法と そこからできること|Excel VBA
VBA・最終行
VBAで最終行を取得する方法を解説。最終行の行番号を取得できることにより最終行の削除や、最終行までセルを選択したり繰り返したり色々なことが可能になります。
※その他関連記事は、このページの下の方にもあります。