最終行(Row)の次の行Rangeを取得(空白まで)

最終行の下にデータを追加したい場合使用します。
指定した行の先頭から下に空白行を検索して、その次の空白行をRangeで取得します。
下の図では「A1」を指定すると、「A7」のRangeが戻ります。
「A7」のRange にOffset(0, 1)は「品目」、Offset(0, 2)は「値段」と設定できます。

【サンプルプログラム】

Sub SampleProgram()
    Dim last_rgn As Range
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Sheet2")

    ' 最終行を検索(空白まで)し、次の行(空白)のRangeを取得
    Set last_rgn = GetBlankNextRange(ws, "A1")
    
    ' データの追加
    If last_rgn.Row <= 1 Then    ' データが無く、先頭行の場合
        ' タイトル
        last_rgn = "No."
        last_rgn.Offset(0, 1) = "品目"
        last_rgn.Offset(0, 2) = "値段"
        last_rgn.Offset(0, 3) = "備考"
    
        ' 一件目をタイトルの下に追加する
        Set last_rgn = last_rgn.Offset(1, 0)
        last_rgn = 1
    Else
        ' 2行目以降の場合は、前の数値に+1
        last_rgn = last_rgn.Offset(-1, 0) + 1
    End If
    last_rgn.Offset(0, 1) = "グレープフルーツ"
    last_rgn.Offset(0, 2) = "380"
    last_rgn.Offset(0, 3) = "イスラエル産"
End Sub

【関数化】

' ------------------------------------------------------------
' 説明:最終行を検索(空白まで)し、次の行(空白)のRangeを返す
' 引数:1:処理対象のワークシート 省略時はActiveSheet
'       2:基準となる Range を指定
' 戻値:空白の最終行Range
' ------------------------------------------------------------
Function GetBlankNextRange(Optional ByVal ws As Worksheet = Nothing, Optional base As String = "A1") As Range
    If ws Is Nothing Then
        Set ws = ActiveSheet
    End If

    If ws.Range(base) = "" Then
        ' 指定行目が空白の場合は、指定行とする
        Set GetBlankNextRange = ws.Range(base)
    ElseIf ws.Range(base).Offset(1, 0) = "" Then
        ' 次の行目が空白の場合は、指定行とする
        Set GetBlankNextRange = ws.Range(base).Offset(1, 0)
    Else
        ' セルの 1行目 から最終行を取得
        Set GetBlankNextRange = ws.Range(base).End(xlDown).Offset(1, 0)
    End If
End Function

コメント