大体でIT
大体でIT
2022/2/27
Excel VBAで、最終行したい場合、VBAコードが簡単なので、基本的には「CurrentRegion」か「End」を使って最終行を取得するといいです。入力行数がバラバラで空白列がある場合には、「Find」を使います。場面に応じて最終行を取得しましょう。
この記事では、最終行を取得する方法について、ご紹介します。
CurrentRegionを使う
Endを使う
Findを使う
「CurrentRegion」の弱点は、「空白行」になります。
まずは、場面に応じて、「CurrentRegion」もしくは「End」を使うといいです。
入力行数がバラバラで、空白列がある場合など、イレギュラーな場合には、「Find」を使うと最終行を簡単に取得することができます。
では、最終行を取得する方法について、解説していきます。
VIDEO
CurrentRegionで最終行を取得してみます。
「CurrentRegion」で、表のセル範囲を取得して、最終行を取得するという感じになります。
CurrenRegionで最終行を取得
CurrentRegionで、最終行を取得するVBAコードになります。
Sub TEST1()
'最終行を選択する
With Range("A1").CurrentRegion
.Rows(.Rows.Count) .Select
End With
End Sub
こんな感じで、CurrentRegionを使えば、最終行を取得することができます。
最終行の行番号を取得
最終行の行番号を取得したい場合は、「.Row」を最後につけると取得することができます。
Sub TEST2()
'最終行の行番号を取得する
With Range("A1").CurrentRegion
Debug.Print .Rows(.Rows.Count).Row
End With
End Sub
こんな感じで、「.Row」を使えば、最終行の行番号を取得できます。
「CurrentRegion」の弱点は、空白行になります。
空白行がある表
空白行がある場合でCurrentRegionを使ってみます。
最終行を取得できない
こんな感じで、空白行があるとCurrentRegionは使えないです。
空白行がある場合は、Endを使うと、最終行を取得することができます。
Endで最終行を取得する
Endを使って、最終行を取得するVBAコードは、こんな感じになります。
Sub TEST3()
'Endで最終行を選択
Cells(Rows.Count , "A").End(xlUp) .Select
End Sub
空白行がある場合で、Endを使って最終行を取得してみます。
Endを使う手順
「.Cells(Rows.Count, "A")」でシートの最終行を取得できます。
「.End(xlup)」で「Ctrl + ↑」を実行することができます。
これで、値が入力されている最終行を取得することができます。
値が入力されている最終行を取得することができました。
行番号を取得
最終行の行番号を取得したい場合は、「.Row」を最後につけます。
Sub TEST4()
'Endで最終行の行番号を取得
Debug.Print Cells(Rows.Count, "A").End(xlUp).Row
End Sub
「End」の弱点は、「フィルタと非表示」になります。
Sub TEST5()
'最終行を選択
Cells(Rows.Count, "A").End(xlUp).Select
End Sub
フィルタされている場合と、非表示行がある場合で、実行してみます。
最終行がフィルタされている場合
最終行がフィルタされている場合で、Endを実行してみます。
可視セルの最終行が取得されて、最終行は取得できないです。
最終行が非表示の場合
最終行が非表示になっている場合で、Endを実行してみます。
先ほどと同じく、可視セルの最終行が取得されて、最終行は取得できないです。
フィルタや非表示行がある場合は、CurrentRegionを使えます。
Sub TEST6()
'最終行を選択する
With Range("A1").CurrentRegion
.Rows(.Rows.Count) .Select
End With
End Sub
最終行がフィルタされていても、CurrentRegionを使えば最終行を取得できます。
最終行がフィルタされている場合
最終行がフィルタされていても、CurrentRegionを使えば最終行を取得できました。
また、最終行が非表示になっていても、CurrentRegionを使えば最終行を取得できます。
最終行が非表示になっている場合
最終行が非表示になっていても、CurrentRegionを使えば最終行を取得できました。
もう一つの対策としては、「すべての行を表示」して最終行を取得する方法があります。
フィルタを解除して最終行を取得
フィルタを解除して、最終行を取得するVBAコードになります。
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
こんな感じで、フィルタや非表示行がある場合で、Endを使いたい場合は、CurretRegionか、すべての行を表示してEndを使う、という方法を使いましょう。
もう一つ、最終行を取得する方法で、「Find」を使う方法があります。
Findで最終行を取得するVBAコードになります。
Sub TEST9()
'A~C列で最終行を選択する
Range("A1:C1").EntireColumn.Find("*", , , , 1, 2) .Select
End Sub
表を用意
実行すると、Findを使って、最終行を選択できます。
Findで最終行を取得できた
Findのすごいところは、入力行数がバラバラで空白列がある場合でも、最終行を取得できるということです。
あまりない例ですけども、実務ではこういったパターンも出てきたりしますので、知っておくと便利です。
Sub TEST10()
'A~E列で最終行を選択する
Range("A1:E1" ).EntireColumn.Find("*", , , , 1, 2).Select
End Sub
入力行数がバラバラで空白列がある
Findを使うと、こんな表でも、最終行を取得することができます。
Findで最終行を取得できた
Findを使えば、最終行が「非表示」でも取得することができます。
最終行を非表示
最終行を取得できた
最終行がフィルタされている場合で、実行してみます。
Findの弱点はフィルタ
最終行を取得できない
Findを使う場合は、フィルタを解除して、最終行を取得するといいです。
Sub TEST11()
'すべての行を表示する
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
'A~E列で、最終行を選択する
Range("A1:E1").EntireColumn.Find("*", , , , 1, 2).Select
End Sub
最終行がフィルタされている場合で、実行してみます。
最終行がフィルタされている場合
これで、フィルタを解除して、最終行を選択できます。
フィルタを解除して、最終行を取得できた
こんな感じで、Findを使えば、入力行数がバラバラで、空白列がある場合でも、最終行を取得することができます。
この記事では、最終行を取得する方法について、ご紹介しました。
CurrentRegionを使う
Endを使う
Findを使う
「CurrentRegion」の弱点は、「空白行」になります。
まずは、場面に応じて、「CurrentRegion」もしくは「End」を使うといいです。
入力行数がバラバラで、空白列がある場合など、イレギュラーな場合には、「Find」を使うと最終行を簡単に取得することができます。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。