日本語名

部品_範囲設定_固定

英語名

SetRange_Fixed

URL

https://feelcodelab.com/vba_parts/setrange_fixed/

用途

・開始行・開始列・終了行・終了列を、すべて数字で指定して、1つの範囲(Range)を返す
・最終行の取得は行わない(最終行を使いたいときは、GetLastRow の結果を終了行に渡す)
・列が1列だけの範囲も、複数列の範囲も、この部品で作る(開始列と終了列に同じ値を渡すと1列になる)
★ この部品は Sub(プロシージャ)ではなく「Function(関数)」で、Range を返す

基礎区分

土台

用途区分

取得

操作対象区分

範囲

前提条件

★【最重要】ブック(vWb)とシート名(vSheetName)は、必ず引数で指定する(省略できない)
  → ThisWorkbook = このマクロが入っているブック / ActiveWorkbook = いまアクティブなブック
  → ファイルを開く部品の後は、ActiveWorkbook が、開いたファイルに切り替わる。
    開いた直後に、ActiveWorkbook を変数へ控えて、その変数を渡す
★【最重要】戻り値は Range(オブジェクト)なので、受け取るときは必ず Set を使う
・開始行・開始列・終了行・終了列は、すべて 1 以上の整数で、
  終了行は開始行以上、終了列は開始列以上であること
  → 設定の誤りは、Nothing や False ではなく、原因を示すエラーで止まる(Err.Raise)
・GetLastRow の結果を終了行に渡すときは、「データがない場合は 1 が返る」点に注意する
  → 見出しの行より下にデータがあるかは、呼び出し側で先に確認する
・Offset / Find / Resize / With は禁止

依存関係(部品)

・なし(土台の部品。他の部品を参照しない。単独で使用可能)
・組み合わせ:f_GetLastRow → f_SetRange_Fixed
  (最終行を取得してから、その行を終了行として範囲を作る)

依存関係(シート)

・特になし(マッピング表等は不要)

引数

vWb        : 対象のブック(Workbook)※必須(省略できない)
vSheetName : 範囲を作るシートのシート名(String)
vStartRow  : 開始行の行番号(Long)
vStartCol  : 開始列の列番号(Long)
vEndRow    : 終了行の行番号(Long)
vEndCol    : 終了列の列番号(Long)

戻り値

Range : 指定した範囲(開始行・開始列から、終了行・終了列まで)

戻り値の型

Range

コード全文

Function 部品_範囲設定_固定( _
        ByVal vWb As Workbook, _
        ByVal vSheetName As String, _
        ByVal vStartRow As Long, _
        ByVal vStartCol As Long, _
        ByVal vEndRow As Long, _
        ByVal vEndCol As Long) As Range

    Set 部品_範囲設定_固定 = f_SetRange_Fixed(vWb, vSheetName, vStartRow, vStartCol, vEndRow, vEndCol)

End Function

Function f_SetRange_Fixed( _
        ByVal vWb As Workbook, _
        ByVal vSheetName As String, _
        ByVal vStartRow As Long, _
        ByVal vStartCol As Long, _
        ByVal vEndRow As Long, _
        ByVal vEndCol As Long) As Range

    Dim ws As Worksheet

    Set f_SetRange_Fixed = Nothing

    If vWb Is Nothing Then
        Err.Raise vbObjectError + 1010, "f_SetRange_Fixed", _
                  "ブック(vWb)が設定されていません(Nothing)。"
    End If

    On Error Resume Next
    Set ws = vWb.Worksheets(vSheetName)
    On Error GoTo 0

    If ws Is Nothing Then
        Err.Raise vbObjectError + 1011, "f_SetRange_Fixed", _
                  "シート「" & vSheetName & "」が、ブック「" & vWb.Name & "」に存在しません。"
    End If

    If vStartRow < 1 Or vStartCol < 1 Or vEndRow < 1 Or vEndCol < 1 Then
        Err.Raise vbObjectError + 1007, "f_SetRange_Fixed", _
                  "行番号・列番号は 1 以上を指定してください" & _
                  "(開始行=" & vStartRow & "、開始列=" & vStartCol & _
                  "、終了行=" & vEndRow & "、終了列=" & vEndCol & ")。"
    End If

    If vEndRow < vStartRow Or vEndCol < vStartCol Then
        Err.Raise vbObjectError + 1008, "f_SetRange_Fixed", _
                  "終了が開始より前になっています" & _
                  "(開始行=" & vStartRow & "、終了行=" & vEndRow & _
                  "、開始列=" & vStartCol & "、終了列=" & vEndCol & ")。"
    End If

    If vEndRow > ws.Rows.Count Or vEndCol > ws.Columns.Count Then
        Err.Raise vbObjectError + 1009, "f_SetRange_Fixed", _
                  "シートの上限(" & ws.Rows.Count & "行・" & ws.Columns.Count & "列)を超えています" & _
                  "(終了行=" & vEndRow & "、終了列=" & vEndCol & ")。"
    End If

    Set f_SetRange_Fixed = ws.Range( _
        ws.Cells(vStartRow, vStartCol), _
        ws.Cells(vEndRow, vEndCol))

End Function

呼び出し・活用事例

<例1:見出し(2行目)から、最終行までの A列~B列>
Dim lastRow As Long
Dim rng As Range

lastRow = 部品_最終行取得(ThisWorkbook, "転記元", 1)   '1列目で最終行を取得
If lastRow < 3 Then
    MsgBox "データがありません"                       '見出し(2行目)の下にデータがない
    Exit Sub
End If
Set rng = 部品_範囲設定_固定(ThisWorkbook, "転記元", 2, 1, lastRow, 2)

<例2:行を手動で決める>
Set rng = 部品_範囲設定_固定(ThisWorkbook, "転記元", 3, 1, 20, 2)   'A3~B20

<例3:1列だけの範囲>
Set rng = 部品_範囲設定_固定(ThisWorkbook, "転記元", 3, 4, 8, 4)    'D3~D8

BASファイル(ダウンロード)

SetRange_Fixed.bas

バージョン

1.0

更新日

2026-10-27