こんなあなたにおすすめ
・Excel VBAで最終行のセルを取得したい
・Excel VBAで最終列のセルを取得したい
Excelを使っていると、最終行や最終列のセルを取得したいということがよくあります。
今回は、最終行、最終列のセルを取得する方法について解説します。
今回の記事で取得する最終行、最終列のセルでRow、Columnプロパティを使えば、最終行と最終列も取得できます。
この記事の「3. 応用コード」でも少し出てきますが、Row、Columnプロパティについて知りたいという方は、下記記事をご参照ください。
>>【ExcelVBA】セルの位置を取得する Row & Column
最終行を取得する方法
最終行を取得する方法は、以下の通りです。
・Range
(1) Range(“セル”).End(xlDown)
(2) Range(“セル”)End(xlUp)
・Cells
(1) Cells(行, 列).End(xlDown)
(2) Cells(行, 列).End(xlUp)
xlDownで、Excelの「Ctrl」+「↓」に相当します。
(連続データの最終行に移動する)
xlUpで、Excelの「Ctrl」+「↑」に相当します。
(連続データの開始行に移動する)
xlDownで最終行を取得する
↓実行時のExcel
上図で”A1″セルから「Ctrl」+「↓」をすると、”A5″セルまで移動します。
xlDownで実際にやってみると、”A5″を取得できたことがわかります。
Sub test1() Dim c As Range Set c = Cells(1, 1).End(xlDown) Debug.Print c 'A5 End Sub
xlUpで最終行を取得する
xlUpでも最終行を取得することができます。
↓実行時のExcel
上図のように途中で空白がある場合、”A1″セルからxlDownで最終行を取得すると”A2″になってしまいます。
そこで、Excelの最終行を取得して、「Ctrl」+「↑」で移動することで、データの最終行を取得してみましょう。
Excelの最終行を取得するには、Rows.Countを使います。
Sub test2() Dim lRow As Long lRow = Rows.Count 'Excelの最終行を取得する Debug.Print lRow '1048576 End Sub
Excelの最終行を取得できたところで、その行からxlUpを使うと、ちゃんと”A5″セルを取得できたことがわかります。
Sub test3() Dim c As Range Set c = Cells(Rows.Count, 1).End(xlUp) 'Excelの最終行から「Ctrl」+「↑」 Debug.Print c 'A5 End Sub
最終列を取得する方法
続いて、最終列を取得してみましょう。
基本的な書き方は、最終行の取得と同じです。
・Range
(1) Range(“セル”).End(xlToRight)
(2) Range(“セル”)End(xlToLeft)
・Cells
(1) Cells(行, 列).End(xlToRight)
(2) Cells(行, 列).End(xlLeft)
↓実行時のExcel
xlToRightで最終列を取得する
“A1″セルからEnd(xlToRight)を使うことで、データの最終列を取得できます。
Sub test4() Dim c As Range Set c = Cells(1, 1).End(xlToRight) Debug.Print c 'D1 End Sub
xlToLeftで最終列を取得する
最終行の取得でもあったように、途中のセルが空白の場合、xlToRightではうまく最終列を取得できません。
↓実行時のExcel
上図の場合、xlToRightで最終列を取得すると”A2″になってしまします。
そこで、Excelの最終列を取得して、そこから「Ctrl」+「←」で移動することで、セルを取得してみましょう。
Excelの最終行を取得するには、Columns.Countを使います。
Sub test5() Dim lColumn As Long lColumn = Columns.Count 'Excelの最終列を取得する Debug.Print lColumn '16384 End Sub
Excelの最終列を取得できたところで、その列からxlToLeftを使うと、ちゃんと”D1″セルを取得できたことがわかります。
Sub test6() Dim c As Range Set c = Cells(1, Columns.Count).End(xlToLeft) Debug.Print c 'D1 End Sub
応用コード
では、実際に取得した最終行と最終列を使って、データを書き換えていきましょう。
今回は、データ範囲の値を全て”0″に変えるコードを書いていきます。
↓実行時のExcel
Sub test7() Dim lastRow As Long Dim lastColumn As Long lastRow = Cells(Rows.Count, 1).End(xlUp).row lastColumn = Cells(1, Columns.Count).End(xlToLeft).Column Debug.Print "行:" & lastRow & ", 列:" & lastColumn '行:5, 列:4 Dim i As Long Dim j As Long For i = 1 To lastRow '最終行(5行目)まで処理を繰り返す For j = 1 To lastColumn '最終列(4列目)まで処理を繰り返す Cells(i, j).Value = 0 Next Next End Sub
↓実行結果
まとめ
ここまで、最終行と最終列の取得方法について解説しました。
最終行と最終列を取得して、For Nextで取得したセルまで処理を実行なんてこともよく使いますので、ぜひ試してみてください。
For Nextの使い方については、下記の記事で解説していますので、ご参照ください。
>>【ExcelVBA】For Next文 繰り返し(ループ)処理
セルの位置を取得する方法については、下記の記事で解説していますので、ご参照ください。
>>【ExcelVBA】セルの位置を取得する Row & Column
Excelで作業効率をアップしたい方は、下記の記事もご参照ください。
>>Excelのショートカット一覧 覚えて作業効率アップ!!
>>Excelで覚えておくべき関数 作業効率アップ間違いなし
オンラインスクール受講者数No.1!
・自宅にいながらオンライン完結で勉強できる
➡スクールへの移動時間を削減するため、効率的に学習可能!
・受講生に1人ずつ現役のプロのパーソナルメンターがつく
➡分からないことがわかるまで徹底的にメンターに質問可能!
・チャットで質問すればすぐに回答が返ってくる
➡レスポンスが速いから、わからないことをその場で解決!
・オリジナルサービスやオリジナルアプリなどの開発までサポート
➡就職、転職のときに役立つポートフォリオを開発可能!
無料で体験できるので、まずはお試し
>>TechAcademyの無料体験はこちら
[…] ことでも、データ範囲の変更に対応できます。 最終行、最終列の取得方法については、下記の記事をご参照ください。 >>【ExcelVBA】最終行、最終列のセルを取得する方法 End, Rows.Count […]