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

VBA
スポンサーリンク

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

CellsとEndで最終行を取得するコード

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が表示されます。

Endでセル指定を移動させた結果

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

最終行:Rows.Count+.End(xlUp)
最終列:Columns.Count+.End(xlToLeft)

最終行の取得

Sub test()

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

End Sub
CellsとEndで最終行を取得するコード

Cells(Rows.Count, 1)でA列末端のセルを指定しましょう。

次にEnd(xlUp)で「Ctrl + ↑」を行うと最終行に到達します。

末端業からEndで移動した結果

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

最終列の取得

Sub test()

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

End Sub

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

末端列からEndで移動した結果

末端から取得する理由

先頭(A1)から.Endを使っても同じじゃない?

と疑問に思う方もいるかもしれません。

これは、データが欠損している場合に話が変わります。

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

先頭からEndと末端からEndの違い
Sub test()

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

End Sub

3行目のコードではA1から右へワープさせています。

4行目のコードでは末端列から左へワープさせています。

これを実行してみると、最初は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で取得しました。

最終行の取得と計算を組み合わせたプログラムの結果

これならどれだけデータが入っていても処理できますね。

直接Rows.Countを終値にしてもよくない??

Sub test()

For i = 1 To Rows.Count
    Cells(i, 2) = Cells(i, 1) ^ 2
Next i

End Sub

この書き方はおススメしません。

まず処理時間が異常に長いです。

加えて、数値が入っていないA列のデータも処理されるので関係ないデータが出力されます。

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

下図のように、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から下のデータがコピーされます。

コピペの方法は以下の記事で解説しています。

まとめ

今回は最終行(列)の取得方法を解説しました。

実務でプログラムを組むときに頻繁に使うのでぜひマスターしてくださいね。

コメント

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