大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、最終行したい場合、VBAコードが簡単なので、基本的には「CurrentRegion」か「End」を使って最終行を取得するといいです。入力行数がバラバラで空白列がある場合には、「Find」を使います。場面に応じて最終行を取得しましょう。

はじめに

この記事では、最終行を取得する方法について、ご紹介します。

最終行を取得する方法は、次の3つがあります。

  • CurrentRegionを使う
  • Endを使う
  • Findを使う

「CurrentRegion」の弱点は、「空白行」になります。

「End」の弱点は、「フィルタや非表示行」です。

まずは、場面に応じて、「CurrentRegion」もしくは「End」を使うといいです。

入力行数がバラバラで、空白列がある場合など、イレギュラーな場合には、「Find」を使うと最終行を簡単に取得することができます。

では、最終行を取得する方法について、解説していきます。

この記事を読むメリット

  • 最終行を取得することができます

本記事の内容を動画でまとめています

目次から見たい項目へ移動すると便利ですよ。

目次

CurrentRegionで最終行を取得する

CurrentRegionで最終行を取得してみます。

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」を使えば、最終行の行番号を取得できます

結果は、「8」行目となりました。

こんな感じで、「.Row」を使えば、最終行の行番号を取得できます。

空白行が弱点

「CurrentRegion」の弱点は、空白行になります。

空白行がある表

空白行がある場合でCurrentRegionを使ってみます。

空白行がある場合でCurrentRegionを使ってみます

空白行があると、最終行を取得できないです。

最終行を取得できない

空白行があると、最終行を取得できません

上のセル範囲の最終行を取得してしまいます。

こんな感じで、空白行があるとCurrentRegionは使えないです。

Endで最終行を取得する

空白行がある場合は、Endを使うと、最終行を取得することができます。

Endで最終行を取得する

Endを使って、最終行を取得してみます。

Endで最終行を取得する

Endを使って、最終行を取得するVBAコードは、こんな感じになります。

Sub TEST3()
    
    'Endで最終行を選択
    Cells(Rows.Count, "A").End(xlUp).Select
    
End Sub

空白行がある場合で、Endを使って最終行を取得してみます。

空白行がある場合で、Endを使って最終行を取得してみます

実行すると、最終行を取得することができます。

最終行を選択できました

最終行を選択できました。

Endを使う手順は、次のようになります。

Endを使う手順

「.Cells(Rows.Count, "A")」でシートの最終行を取得できます。

「.Cells(Rows.Count,

「.End(xlup)」で「Ctrl + ↑」を実行することができます。

「.End(xlup)」で「Ctrl + ↑」を実行します

これで、値が入力されている最終行を取得することができます。

値が入力されている最終行を取得することができます

値が入力されている最終行を取得することができました。

行番号を取得

最終行の行番号を取得したい場合は、「.Row」を最後につけます。

Sub TEST4()
    
    'Endで最終行の行番号を取得
    Debug.Print Cells(Rows.Count, "A").End(xlUp).Row
    
End Sub

実行してみます。

「.Row」で最終行の行番号を取得できます

「.Row」で最終行の行番号を取得できました。

フィルタと非表示が弱点

「End」の弱点は、「フィルタと非表示」になります。

Sub TEST5()
    
    '最終行を選択
    Cells(Rows.Count, "A").End(xlUp).Select
    
End Sub

フィルタされている場合と、非表示行がある場合で、実行してみます。

最終行がフィルタされている場合

最終行がフィルタされている場合で、Endを実行してみます。

最終行がフィルタされている場合で、Endを実行してみます

実行してみます。

可視セルの最終行が取得されて、最終行は取得できないです

可視セルの最終行が取得されて、最終行は取得できないです。

最終行が非表示の場合

最終行が非表示になっている場合で、Endを実行してみます。

最終行が非表示になっている場合で、Endを実行してみます

実行してみます。

先ほどと同じく、可視セルの最終行が取得されて、最終行は取得できないです

先ほどと同じく、可視セルの最終行が取得されて、最終行は取得できないです。

CurrentRegionを使う

フィルタや非表示行がある場合は、CurrentRegionを使えます。

ただ、空白行がないのが条件です。

Sub TEST6()
    
    '最終行を選択する
    With Range("A1").CurrentRegion
        .Rows(.Rows.Count).Select
    End With
    
End Sub

最終行がフィルタされていても、CurrentRegionを使えば最終行を取得できます。

最終行がフィルタされている場合

最終行がフィルタされていても、CurrentRegionを使えば最終行を取得できます

最終行がフィルタされていても、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」を使う方法があります。

Findで最終行を取得

Findで最終行を取得するVBAコードになります。

Sub TEST9()
    
    'A~C列で最終行を選択する
    Range("A1:C1").EntireColumn.Find("*", , , , 1, 2).Select
    
End Sub

表を用意しておきます。

表を用意

表を用意しておきます

実行すると、Findを使って、最終行を選択できます。

Findで最終行を取得できた

Findを使って、最終行を選択できました

Findを使って、最終行を選択できました。

入力行数がバラバラで空白列がある場合

Findのすごいところは、入力行数がバラバラで空白列がある場合でも、最終行を取得できるということです。

あまりない例ですけども、実務ではこういったパターンも出てきたりしますので、知っておくと便利です。

列のセル範囲を変更しておきます。

Sub TEST10()
    
    'A~E列で最終行を選択する
    Range("A1:E1").EntireColumn.Find("*", , , , 1, 2).Select
    
End Sub

次の表で実行してみます。

入力行数がバラバラで空白列がある

入力行数がバラバラです。

入力行数もバラバラです

空白列もあります。

空白列があります

Findを使うと、こんな表でも、最終行を取得することができます。

Findで最終行を取得できた

Findを使って、最終行を選択できました

Findを使って、最終行を選択できました。

非表示行でも取得できる

Findを使えば、最終行が「非表示」でも取得することができます。

最終行を非表示

最終行が非表示でも、Findを使えば最終行を取得できます

では、実行してみます。

最終行を取得できた

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を使えば、入力行数がバラバラで、空白列がある場合でも、最終行を取得することができます。

おわりに

この記事では、最終行を取得する方法について、ご紹介しました。

最終行を取得する方法は、次の3つがあります。

  • CurrentRegionを使う
  • Endを使う
  • Findを使う

「CurrentRegion」の弱点は、「空白行」になります。

「End」の弱点は、「フィルタや非表示行」です。

まずは、場面に応じて、「CurrentRegion」もしくは「End」を使うといいです。

入力行数がバラバラで、空白列がある場合など、イレギュラーな場合には、「Find」を使うと最終行を簡単に取得することができます。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す