【Excel VBA】最終行と列を同時に取得する方法!複数シートも可

【Excel VBA】 最終行と列を同時に取得する方法!

Excelシートにある表の最終行と列を同時に取得する方法を知りたいときはないでしょうか。

けど、そんな中で悩むことは、

・Excelシートにある表の最終行と列を同時に取得する方法がわからない
・VBAでExcelシートにある表の最終行と列を同時に取得する方法がわからない

ですよね。 今回はそんなお悩みを解決する

・Excelシートにある表の最終行と列をVBAで効率的に取得する方法
・複数のシートにある表の最終行と列を同時に取得する方法

についてまとめます!

最終行・列の概念

最終行と列が指すのは、データが存在するシート上の最後の行と列のことです。

以下のような表があったとして、最終行は6行目、最終列はBとなります。

今回は範囲として取得するので、最終行と最終列を組み褪せて、

A1:B6

のような形で取得するようにしていきます。

最終行を取得する基本的な方法

VBAを使用してシートの最終行を特定する方法については以下の記事にまとめていますので、こちらをご参考ください。
【Excel VBA】最終行を取得する方法5選!取得できない対処法も!

タカヒロ
タカヒロ
今回最終行を取得する方法は記事に記載されているパターン①を採用しています。

最終行と列を同時に取得する方法

最終行と列を同時に取得する方法について説明をします。

集計シートを用意

まずは集計するシートを用意します。

シート名は「表の最終行列取得結果」としています。

A列にシート名B列に表の範囲が入る形になりますので、1行目にそれぞれのタイトルを入力します。

次にサンプルとなる表を別シートに用意します。

VBAコード

最終行と列を同時に取得するサンプルコードは以下の通りです。

Sub 表の最終行列を取得()

    Dim objSheet As Worksheet
    Dim objKekkaSheet As Worksheet
    Dim lastRow As Long
    Dim lastCol As Integer
    Dim objTableRG As Range
    ' 表の最終行列取得結果を出力するシートを指定します。
    Set objKekkaSheet = ThisWorkbook.Sheets("表の最終行列取得結果")

    ' 対象シートを設定します。
    Set objSheet = ThisWorkbook.Sheets("Sheet1")
    
    ' 最終行を取得します。
    lastRow = objSheet.Cells(objSheet.Rows.Count, 1).End(xlUp).Row
    
    ' 最終列を取得します。
    lastCol = objSheet.Cells(1, objSheet.Columns.Count).End(xlToLeft).Column
    
    ' 範囲を設定します。
    Set objTableRG = objSheet.Range(objSheet.Cells(1, 1), objSheet.Cells(lastRow, lastCol))
    
    ' 表の最終行列取得結果を指定シートへ出力します。
    objKekkaSheet.Cells(2, 1) = objSheet.Name
    objKekkaSheet.Cells(2, 2) = objTableRG.Address

End Sub

VBAを設定する

以下を設定していきます。
表の最終行列取得結果を出力するシートを指定します。

Set objKekkaSheet = ThisWorkbook.Sheets("表の最終行列取得結果")

表の範囲を取得したい対象シートを設定します。

Set objSheet = ThisWorkbook.Sheets("Sheet1")

VBAを実装

以下VBAの実装手順を参考にVBAを実装していきます。

VBAを実行する

VBAを実行してみましょう。

集計シートに対象シートの表の最終行列が挿入されましたね!

VBAの説明

VBAについて説明をします。

このVBAは、複数のシートの最終行と列を取得して、結果を別のシートに出力します。

lastRowlastCol変数は、それぞれ最終行と最終列の位置を保持します。

End(xlUp)End(xlToLeft)メソッドは、空白セルを避けながら最終行・列を特定します。

lastRow = objSheet.Cells(objSheet.Rows.Count, 1).End(xlUp).Row
lastCol = objSheet.Cells(1, objSheet.Columns.Count).End(xlToLeft).Column

objSheet.Cells(1, 1)はシートの左上隅、つまり行番号1、列番号1のセルを指します。
objSheet.Cells(lastRow, lastCol) ここで lastRow と lastCol は、それぞれシート上のデータが存在する最終行と最終列の番号を保持していますので
データが含まれる範囲の右下隅、つまり最終行と最終列の交点にあるセルを指定する形になります。
これをobjSheet.Range(…)で、指定された開始セル(objSheet.Cells(1, 1))と終了セル(objSheet.Cells(lastRow, lastCol))を含む範囲を定義し、
定義された範囲を objTableRG という変数に割り当てます。

Set objTableRG = objSheet.Range(objSheet.Cells(1, 1), objSheet.Cells(lastRow, lastCol))

表の最終行列取得結果を指定シートへ出力します。

objKekkaSheet.Cells(2, 1) = objSheet.Name
objKekkaSheet.Cells(2, 2) = objTableRG.Address

複数シートの最終行と列を同時に取得する方法

より実用的な複数シートの最終行と列を同時に取得する方法について説明をします。

表シートを複数用意

表シートを複数用意しましょう。

行と列数が異なるパターンにしていきましょう。

また、検証のため空のシートも対象にしました。

 

集計するシートは前回と同じくシート名は「表の最終行列取得結果」としています。

VBAコード

複数シートの表の最終行と列を同時に取得するサンプルコードは以下の通りです。

Sub 複数シートの表の最終行列を取得()

    Dim objSheet As Worksheet
    Dim objKekkaSheet As Worksheet
    Dim lastRow As Long
    Dim lastCol As Integer
    Dim i As Integer
    Dim objTableRG As Range
    
    Set objKekkaSheet = ThisWorkbook.Sheets("表の最終行列取得結果")

    ' シートの位置番号を指定しその数分繰り返します。
    For i = 2 To 5
        ' シートを設定します。
        Set objSheet = ThisWorkbook.Sheets(i)
        
        ' 最終行を取得します。
        lastRow = objSheet.Cells(objSheet.Rows.Count, 1).End(xlUp).Row
        
        ' 最終列を取得します。
        lastCol = objSheet.Cells(1, objSheet.Columns.Count).End(xlToLeft).Column
        
        ' 範囲を設定します。
        Set objTableRG = objSheet.Range(objSheet.Cells(1, 1), objSheet.Cells(lastRow, lastCol))
        
        ' 表の最終行列取得結果を指定シートへ出力します。
        objKekkaSheet.Cells(i, 1) = objSheet.Name
        objKekkaSheet.Cells(i, 2) = objTableRG.Address
    Next

End Sub

VBAを設定する

以下を設定していきます。

シートの位置番号を指定しその数分繰り返します。
サンプルでは2シート目から4シート目の間を指定しています。

For i = 2 To 5

VBAを実行する

VBAを実行してみましょう。

集計シートに複数シートの表の最終行列が挿入されましたね!

さいごに

いかがでしょうか。

今回は、

・Excelシートにある表の最終行と列をVBAで効率的に取得する方法
・複数のシートにある表の最終行と列を同時に取得する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

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