【ExcelVBA】最終行、最終列のセルを取得する方法 End, Rows.Count

こんなあなたにおすすめ

・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で覚えておくべき関数 作業効率アップ間違いなし

【Excelについて学びたい方】
Excel 最強の教科書[完全版]
【Excel VBAについて学びたい方】
Excel VBA 脱初心者のための集中講座
エンジニアを目指すなら、TechAcademy!
オンラインスクール受講者数No.1!

・自宅にいながらオンライン完結で勉強できる
➡スクールへの移動時間を削減するため、効率的に学習可能!

・受講生に1人ずつ現役のプロのパーソナルメンターがつく
➡分からないことがわかるまで徹底的にメンターに質問可能!

・チャットで質問すればすぐに回答が返ってくる
➡レスポンスが速いから、わからないことをその場で解決!

・オリジナルサービスやオリジナルアプリなどの開発までサポート
➡就職、転職のときに役立つポートフォリオを開発可能!

無料で体験できるので、まずはお試し
>>TechAcademyの無料体験はこちら

1 COMMENT

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です