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

わずか3行でした。

参照元のマクロと同じモジュール内に記述する想定で、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


[実行してみる]




(testGetRange()を実行)






こんな感じになりました。