VBA【最終行の取得】を”確実”にする方法【マクロ基本編】
VBAにおいて最終行を取得したいってことよくありますよね。
そこで、ExcelのVBAで確実に最終行を取得する方法を解説します。
最終行の取得は、よく「.End(xlDown)」などで紹介されています。
ですが、この方法では、みなさんが思う最終行を取得できない事があります。
最終行を取得するVBAサンプルコードもあります。
サンプルコードをコピペして実行するだけで、テストも可能です。
ですので、簡単に最終行の取得をする事が可能です。
最終行に移動したい方も、最終行さえ取得してしまえば、できます。
今回紹介するのは、VBAで普通に上から下に最終空白行を取得する方法ですが
下から上に最終空白行を取得する方法は、こちらで解説しています。
VBAで最終行を取得する方法は、いくつかあります。
今回は、最終行を取得する方法として2つ解説したいと思います。
なぜ、2つなのかも、合わせて解説します。
< ---目次--- >
◆VBAで最終行を取得する方法
最終行を取得する方法を2つも紹介する理由を説明します。
本来であれば2つも紹介すると混乱してしまうので避けたいのですが
ここで避けてしまうと後々、後悔しますので、しっかり理解してください。
・2種類のコードの違い
2種類のコードの大きな違いは
①のサンプルコードは、確実に最終空白行を取得することができます。
②のサンプルコードは、関数入力セル等なにかしら使用したセルがあると
正常に最終空白行を取得する事ができません。
最終行を取得できないとお困りの方は、②のサンプルコードのようなコードを書いてしまっているのではないでしょうか。
その場合は、①のサンプルコードようにすれば、確実に最終空白行を取得する事が出来ます。
・最終行取得サンプルコード①
Sub 最終空白行取得_1()
Dim StartRow As Long, LastRow_1 As Long _
, LastRow_2 As Long
'●確実に最終空白行を取得
For StartRow = 1 To 10000
If Cells(StartRow, 1) = "" Then
LastRow_1 = StartRow
Exit For
End If
Next StartRow
'Range("A" & LastRow_1).Select '単セル選択
'Range("A1", Range("C" & LastRow_1)).Select '範囲選択
End Sub
①確実に最終空白行を取得するコードの解説
VBAで最終空白行を取得するには、For~Nextなどの繰り返し処理で空白を確認していくことで取得する事ができます。
基本的にはこちらのコードを使用する事をオススメします。
セルの状態によって使い分けるのは面倒ですし、覚える手間も省けます。
メリット
- 確実に最終空白行を取得可能
デメリット
- ②コードに比べ、処理時間が長い(1万行あっても微々たる程度)
- ②コードに比べ、コードの量が多い
・最終行取得サンプルコード②
Sub 最終空白行取得_2()
Dim StartRow As Long, LastRow_1 As Long _
, LastRow_2 As Long
'●簡易的な最終空白行を取得
'関数入力セル等があると正常に最終行取得できない
LastRow_2 = Range("A1").End(xlDown).Row '入力がある最終行
End Sub
②簡易的な最終空白行を取得するコードの解説
「End(xlDown)」は、「Ctrl + ↓」と同じ動作になります。
「End(xlDown)」を用いて最終行を取得するコードは、よく紹介されていますが
使用することは、オススメできません。
オススメできない理由としては、最終空白行を取得したいのに、正常に取得できない事があるからです。
それは、プログラムとして、不安定ですよね。
関数は、絶対つかいません!空白セルをコピーして値のみ貼付けもしません!
という方は、使っても問題ありませんが、そんな人なかなかいませんよね。
どうしても処理速度が気になる場合のみ②のサンプルコードを使用してください。
10万行あっても①コードと②コードの処理速度の差は「0.3秒」程度だと思います。
むしろ、そこまで速度を気にするならこちらの記事で紹介している対策をした方が良いと思います。
メリット
- ①コードに比べ、処理時間が早い(1万行あっても微々たる程度)
- コードが簡易的でコード量が、少ない
デメリット
- セルの状態によっては、最終空白行が正常に取得できない。
最終空白行が正常に取得できないセルの状態とは
- 関数の演算結果が空白(「=””」)のセル
- 関数の演算結果が空白のセルをコピーし、値だけ貼付けしたセル
◆まとめ
VBAで最終行を取得する方法を2種類紹介しました。
基本的には、①のサンプルコードの「For」を使用した
繰り返し処理で最終空白行を取得してくださいね。
これを読んでも解決できない方、なにか不明点がある場合は
コメントして頂くか、こちらからお問い合わせしてください。