参考元:【VBA】最終行を取得する方法3選【CurrentRegion、End、Findを使う】
https://daitaideit.com/vba-get-lastrow/
最終行を取得する方法は、次の3つがあります。
CurrentRegionを使う
Endを使う
Findを使う
1.CurrentRegionで最終行を取得する
Sub TEST1()
'最終行を選択する
With Range("A1").CurrentRegion
.Rows(.Rows.Count).Select
End With
End Sub
最終行の行番号を取得
最終行の行番号を取得したい場合は、「.Row」を最後につけると取得することができます。
Sub TEST2()
'最終行の行番号を取得する
With Range("A1").CurrentRegion
Debug.Print .Rows(.Rows.Count).Row
End With
End Sub
空白行が弱点
Endで最終行を取得する
Endを使って、最終行を取得するVBAコードは、こんな感じになります。
Sub TEST3()
'Endで最終行を選択
Cells(Rows.Count, "A").End(xlUp).Select
End Sub
行番号を取得
最終行の行番号を取得したい場合は、「.Row」を最後につけます。
Sub TEST4()
'Endで最終行の行番号を取得
Debug.Print Cells(Rows.Count, "A").End(xlUp).Row
End Sub
フィルタと非表示が弱点
CurrentRegionを使う
フィルタや非表示行がある場合は、CurrentRegionを使えます。
ただ、空白行がないのが条件です。
Sub TEST6()
'最終行を選択する
With Range("A1").CurrentRegion
.Rows(.Rows.Count).Select
End With
End Sub
実行結果:
すべて表示して最終行を取得
もう一つの対策としては、「すべての行を表示」して最終行を取得する方法があります。
こちらの方が確実ですね。
フィルタを解除して最終行を取得
Sub TEST7()
'フィルタを解除する
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
'最終行を選択する
Cells(Rows.Count, "A").End(xlUp).Select
End Sub
すべての行を表示して最終行を取得
すべての行を表示して、最終行を取得するVBAコードになります。
Sub TEST8()
'すべての行を表示する
Rows.Hidden = False
'最終行を選択する
Cells(Rows.Count, "A").End(xlUp).Select
End Sub
Findで最終行を取得する
Findで最終行を取得するVBAコードになります。
Sub TEST9()
'A~C列で最終行を選択する
Range("A1:C1").EntireColumn.Find("*", , , , 1, 2).Select
End Sub
フィルタが弱点:ただ、Findの弱点は、「フィルタ」になります。
最終行がフィルタされている場合で、実行してみます。
フィルタを解除して、最終行を取得
Findを使う場合は、フィルタを解除して、最終行を取得するといいです。
Sub TEST11()
'すべての行を表示する
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
'A~E列で、最終行を選択する
Range("A1:E1").EntireColumn.Find("*", , , , 1, 2).Select
End Sub
おわりに
この記事では、最終行を取得する方法について、ご紹介しました。
最終行を取得する方法は、次の3つがあります。
CurrentRegionを使う
Endを使う
Findを使う
「CurrentRegion」の弱点は、「空白行」になります。
「End」の弱点は、「フィルタや非表示行」です。
まずは、場面に応じて、「CurrentRegion」もしくは「End」を使うといいです。
入力行数がバラバラで、空白列がある場合など、イレギュラーな場合には、「Find」を使うと最終行を簡単に取得することができます。