Excel VBAで最終行・最終列を取得
Excel VBA でシートに書かれている表の、最終行、最終列を取得します。
最終行、最終列を取得する方法はいくつかあります。
今回はキー操作とVBAを比べながらEndプロパティで取得する方法を説明します。
連続したデータの最終行を取得する
連続したデータ場合、「Ctrl + ↓」キーで最終行を取得することができます。
B3セルにカーソルを置き、「Ctrl + ↓」キーを押下します。
カーソルがB7セルに移動します。
この操作を「マクロの記録」で記録すると、以下のコードが記述されます。
Sub Macro1()
‘
‘ Macro1 Macro
‘
Selection.End(xlDown).Select
End Sub
「Selection」は最初に選択したB3セルのことで、ここから連続したデータの最終行が「Selection.End(xlDown)」です。
「Select」は選択という意味なので、実際にカーソルが最終行B7セルに移動しています。
最終行に移動したB7セルの行番号が知りたいので、以下のように、Row関数を使用します。
Sub Macro1a()
Range(“B3”).End(xlDown).Select
MsgBox Selection.Row & “行目”
End Sub
実行すると、7行目と表示されます。
このようにEnd(xlDown).Selectを使うことで、「Ctrl + ↓」キーを押したときと同じように最終行を選択することができます。
選択後、Row関数で行番号を取得します。
連続したデータの最終列を取得する
連続したデータ場合、「Ctrl + →」キーで最終列を取得することができます。
B3セルにカーソルを置き、「Ctrl +→」キーを押下します。
カーソルがE3セルに移動します。
この操作を「マクロの記録」で記録すると、以下のコードが記述されます。
Sub Macro2()
‘
‘ Macro2 Macro
‘
Selection.End(xlToRight).Select
End Sub
「Selection」は最初に選択したB3セルのことで、ここから連続したデータの最終列が「Selection.End(xlToRight)」です。
最終列に移動したE3セルの列番号が知りたいので、以下のように、Column関数を使用します。
Sub Macro2a()
Range(“B3”).End(xlToRight).Select
MsgBox Selection.Column & “列目”
End Sub
実行すると、5列目と表示されます。
このようにEnd(xlToRight).Selectを使うことで、「Ctrl + →」キーを押したときと同じように最終列を選択することができます。
選択後、Column関数で行番号を取得します。
連続していないデータの最終行を取得する
連続していない、途中で空白セルがあるデータ場合、Excelシートの最終行を選択し、「Ctrl + ↑」キーでデータの最終行を取得することができます。
Excelの最終行のセルにカーソルを置き、「Ctrl +↑」キーを押下します。
※Excelのバージョンによって、最終行は異なります。
カーソルがE3セルに移動します。
この操作を「マクロの記録」で記録すると、以下のコードが記述されます。
Sub Macro3()
‘
‘ Macro3 Macro
‘
Selection.End(xlUp).Select
End Sub
「Selection」は最初に選択した最終行のセルのことで、ここから上に向かって値が設定されている最初のセル(=最終行)が「Selection.End(xlUp)」で、D7セルになります。
最終行に移動したD7セルの行番号が知りたいので、以下のように、Row関数を使用します。
Sub Macro3a()
Cells(Rows.Count, 4).End(xlUp).Select
MsgBox Selection.Row & “行目”
End Sub
実行すると、7行目と表示されます。
Rows.Countはシートの行数です。
Cells関数は、Cells(行, 列)でセルを指定できるので、Cells(Rows.Count, 4)がD列のデータの最終行のセルになります。
最終セルにEnd(xlUp).Selectを使うことで、「Ctrl + ↑」キーを押したときと同じようにデータの最終行のセルになります。
選択後、Row関数で行番号を取得します。
連続していないデータの最終列を取得する
連続していない、途中で空白セルがあるデータ場合、Excelシートの最終列を選択し、「Ctrl + ←」キーでデータの最終行を取得することができます。
Excelの6行の最終列のセルにカーソルを置き、「Ctrl +←」キーを押下します。
カーソルがE6セルに移動します。
この操作を「マクロの記録」で記録すると、以下のコードが記述されます。
Sub Macro4()
‘
‘ Macro4 Macro
‘
Selection.End(xlToLeft).Select
End Sub
「Selection」は最初に選択した最終列のセルのことで、ここから左に向かって値が設定されている最初のセル(=最終列)が「Selection.End(xlToLeft)」で、E6セルになります。
最終列に移動したE6セルの列番号が知りたいので、以下のように、Column関数を使用します。
Sub Macro4a()
Cells(6, Columns.Count).End(xlToLeft).Select
MsgBox Selection.Column & “行目”
End Sub
実行すると、5列目と表示されます。
Columns.Countはシートの列数です。
Cells関数は、Cells(行, 列)でセルを指定できるので、Cells(6, Columns.Count)が6行目のデータの最終列のセルになります。
最終セルにEnd(xlToLeft).Selectを使うことで、「Ctrl + ←」キーを押したときと同じようにデータの最終列を選択することができます。
選択後、Column関数で列番号を取得します。
まとめ
Excel VBA でシートに書かれている表の、最終行、最終列の取得について、キー操作とVBAを比べながらEndプロパティで取得する方法を説明しました。
以上、ExcelVBAで最終行・最終列を取得するプログラムでした。