VBAでシートのデータがある最終行列を取得する
マクロを作成する際に、シート上の(データがある)最終行列を取得したくなる時があります。(ループ処理したり)
ということで以下のプロシージャを作成。
データがある最終行列を取得する
[ソース]Private Sub getRange(sheetName As String, lRow As Long, lCol As Long) '------------------------------------------------------------------------------------ 'getRange 'シート最終行列の設定 '引数1:sheetName・・・・・・シート名 '引数2:lRow ・・・・・・・・最終行 '引数3:lCol ・・・・・・・・最終列 ' '------------------------------------------------------------------------------------ s = Sheets(sheetName).UsedRange.Address '有効レンジ範囲 lRow = Range(s).Rows(Range(s).Rows.count).Row '最終行 lCol = Range(s).Columns(Range(s).Columns.count).Column '最終列 End Sub |
参照元のマクロと同じモジュール内に記述する想定で、privateになっています。
別モジュールから参照する場合はpublicにしないといけませんね。
テストしてみる
[ソース]Sub testGetRange() 'getRange()のテスト Dim sheetName As String '対象シート sheetName = ActiveSheet.name 'アクティブシートを設定 '実際の使用を想定して、一応開始行列も宣言 Dim sRow As String '開始行 Dim sCol As String '開始列 sRow = 1 sCol = 1 '最終行列の変数を宣言 Dim lRow As Long '終了行 Dim lCol As Long '終了列 '最終行列を設定する Call getRange(sheetName, lRow, lCol) Dim msg As String msg = "シート上の" + vbCrLf msg = msg + "最終行:" + CStr(lRow) + vbCrLf msg = msg + "最終列:" + CStr(lCol) + vbCrLf MsgBox msg End Sub |
[実行してみる]
こんな感じになりました。