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+矢印」のことです。
つまりセルの位置をワープさせる命令になります。
A1セルからCtrl + ↓なので、今回のデータでは5が表示されます。
CountとEndで最終行(列)を取得する
最終行の取得
Sub test()
MsgBox Cells(Rows.Count, 1).End(xlUp).Row
End Sub
Cells(Rows.Count, 1)でA列末端のセルを指定しましょう。
次にEnd(xlUp)で「Ctrl + ↑」を行うと最終行に到達します。
つまり、最も下のセルからCtrl+↑の操作をしているわけです。
最終列の取得
Sub test()
MsgBox Cells(1, Columns.Count).End(xlToLeft).Column
End Sub
最終列はColumns.Countから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で取得しました。
これならどれだけデータが入っていても処理できますね。
ちなみに、最終行を取得せず全データを対象に処理すると、処理時間がかなり長くなります。
コピー範囲を自動取得する
下図のように、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↑をする操作だとわかれば、なんとなく腑に落ちるかと思います。
コピペするときにめちゃくちゃ便利なので、ぜひマスターしてください。
コメント