Excelシートにある表の最終行と列を同時に取得する方法を知りたいときはないでしょうか。
けど、そんな中で悩むことは、
・VBAでExcelシートにある表の最終行と列を同時に取得する方法がわからない
ですよね。 今回はそんなお悩みを解決する
・複数のシートにある表の最終行と列を同時に取得する方法
についてまとめます!
もくじ
最終行・列の概念
最終行と列が指すのは、データが存在するシート上の最後の行と列のことです。
以下のような表があったとして、最終行は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は、複数のシートの最終行と列を取得して、結果を別のシートに出力します。
lastRow
とlastCol
変数は、それぞれ最終行と最終列の位置を保持します。
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を実行してみましょう。
集計シートに複数シートの表の最終行列が挿入されましたね!
さいごに
いかがでしょうか。
今回は、
・複数のシートにある表の最終行と列を同時に取得する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す