【VBA】Excelマクロで最終行(列)を取得する方法(End, Count)

VBA

CountとEndを利用して、データが入っているセルの最終行(列)を取得できます。

最終行と列の図
CountとEndで最終行をとるコード

for文の最終位置を自動で決めるのに便利です。

Countで末端の行or列を取得する

Sub test()

MsgBox Rows.Count
MsgBox Columns.Count

End Sub

本記事での末端行(列)とは、Excelシート上でとり得る最大の行(列)のことを指します。

末端の行と列を示した図

今回目標としている最終行(列)とは違うので注意してくださいね。

末端行:シート上でとり得る最大の行番号
最終行:データが入っている最終行

Endでワープする

Sub test()

MsgBox Cells(1, 1).End(xlDown).Row

End Sub

Endは「Ctrl+矢印」のことです。
つまりセルの位置をワープさせる命令になります。

Endで下にセルを移動するコード
上:Cells(行, 列).End(xlUp)
下:Cells(行, 列).End(xlDown)
右:Cells(行, 列).End(xlToRight)
左:Cells(行, 列).End(xlToLeft)

A1セルからCtrl + ↓なので、今回のデータでは5が表示されます。

Ctrl+↓でセルを移動した図

CountとEndで最終行(列)を取得する

最終行の取得

Sub test()

MsgBox Cells(Rows.Count, 1).End(xlUp).Row

End Sub
CountとEndで最終行をとるコード

Cells(Rows.Count, 1)でA列末端のセルを指定しましょう。
次にEnd(xlUp)で「Ctrl + ↑」を行うと最終行に到達します。

末端行からCtrl+↑でセルを移動した図

つまり、最も下のセルからCtrl+↑の操作をしているわけです。

最終列の取得

Sub test()

MsgBox Cells(1, Columns.Count).End(xlToLeft).Column

End Sub

最終列はColumns.CountからCtrl + ←で取得できます。

Ctrl+←で最終列に移動した図

末端から取得する理由

A1セルから「Ctrl + →」の処理で最終列を探すと、欠損値がある場合に失敗します。

欠損値がある場合に最終列を取得した図

このようにC1が欠損しているデータで試してみましょう。

Sub test()

MsgBox Cells(1, 1).End(xlToRight).Column
MsgBox Cells(1, Columns.Count).End(xlToLeft).Column

End Sub

A1から右へワープさせると2、末端列からワープさせると5になるはずです。
なので、絶対にデータが埋まっている保証があるなら、A1からの移動でも問題ありません。

最終行(列)の取得を利用した例

for文の終値に利用する

データが入っている例

A列に入っているデータ全てをfor文で処理しましょう。

Sub test()

endRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To endRow
    Cells(i, 2) = Cells(i, 1) ^ 2
Next i

End Sub

A列にデータが入っている最終行をCountとEndで取得しました。

For文で計算結果を入力した後の図

これならどれだけデータが入っていても処理できますね。
ちなみに、最終行を取得せず全データを対象に処理すると、処理時間がかなり長くなります。

コピー範囲を自動取得する

SampleAをコピーしたい図

下図のように、A列の2~X行までをコピーしたいとします。
項目名がフォーマットで異なる場合に使えます。

Sub test()

endRow = Workbooks("Book1.xlsx").Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
Workbooks("Book1.xlsx").Worksheets(1).Activate
Range(Cells(2, 1), Cells(endRow, 1)).Copy
ThisWorkbook.Worksheets(1).Cells(2, 1).PasteSpecial
Application.CutCopyMode = False

End Sub

endRowは”Book1″のA列でデータが入っている最終行です。
コピーする範囲はA2からなので、Cells(2,1)~Cells(endRow,1)にしましょう。
実行するとA2から下のデータがコピーされます。

まとめ

今回は最終行(列)の取得方法を解説しました。
一番端の行からCtlr↑をする操作だとわかれば、なんとなく腑に落ちるかと思います。
コピペするときにめちゃくちゃ便利なので、ぜひマスターしてください。

コメント

タイトルとURLをコピーしました