2023年9月19日【ID:0】
【ExcelVBA】表の最終行の行番号を取得する方法
VBAで何かを開発する際に、表の最終行の行番号を取得することが結構あります。
そんな最終行の取得方法には色んな方法があります。
こちらでは、4パターンをお伝えし、それぞれのメリット・デメリットをまとめています。
最終行の取得方法は、以下のlastRow1からlastRow4などの方法があります。
これ以外にも色んな方法がありますが、今回はこちらの4パターンについて触れていきます。
※こちらのファイルは配布しています。
では、順番にメリット・デメリットをまとめていきます。
・lastRow1
lastRow1 = Cells(Rows.Count, "A").End(xlUp).Row
こちらは、A列のシートの最後のセル「A1048576※最後の行番号はバージョンによって異なる」から「Ctrl+↑(カーソルキー)」で移動した先のセルの行番号を取得するという方法です。
「Ctrl+↑」で、次に値の入力されているセルまで移動することができます。
メリットは、必ず値の入力されている項目がある場合は、その項目の列を基準に正しい最終行の行番号を取得することができます。
表の間に空白行があったとしても、最終行を取得することができます。
デメリットは、必ず値の入力されている項目がない場合は、正しい最終行の行番号を取得することができないことです。
例えば、以下の表の場合、A列を基準に最終行の行番号を取得すると「11」になってしまいます。
・lastRow2
lastRow2 = Range("A1").End(xlDown).Row
こちらは、A列の先頭「A1」から「Ctrl+↓(カーソルキー)」で移動した先のセルの行番号を取得するという方法です。
メリットは、単純にコードを短く書くことができます。
デメリットは、データが0件の場合や、空白行がある場合に正しい行番号を取得することができません。
0件の場合は、「Ctrl+↓」ですと、次に値が入力されているセルが見つからないため、シートの最後の行番号が取得されてしまいます。
・lastRow3
lastRow3 = Range("A1").SpecialCells(xlLastCell).Row
こちらは、シート上で使用されたことがあるセル範囲の最後の行番号を取得するという方法です。
使用されたことがあるセル範囲は、セルA1を基準に「Ctrl + Shift + End」で選択される範囲になります。
メリットは、必ず値の入力されている項目がなくても、最終行の行番号を取得することができます。
デメリットは、"使用されたことがあるセル範囲"のため、データが削除された場合に、正しい最終行の行番号を取得することができません。
・lastRow4
lastRow4 = Range("A1").CurrentRegion.Rows.Count
こちらは、現時点で使用されているセル範囲から行数を取得するという方法です。
表の中を選択し、「Ctrl+A」で選択される範囲の行数を取得しています。
メリットは、lastRow3と同様に、必ず値の入力されている項目がなくても、最終行の行番号を取得することができます。
デメリットは、空白行がある場合には、正しい最終行の行番号を取得することができません。
それぞれにメリットとデメリットがあるため、それらを理解した上で、活用するのが良いです。
個人的には、lastRow1とlastRow4の方法がオススメになります。
▼サンプルファイル▼