最終行の下にデータを追加したい場合使用します。
指定した行の先頭から下に空白行を検索して、その次の空白行を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


コメント