日本語名

部品_範囲消去_値のみ

英語名

ClearRange_Contents

URL

https://feelcodelab.com/vba_parts/clearrange_contents/

用途

・指定した範囲(Range)の、値(入力された内容)だけを消去する
・消去する範囲は、範囲設定部品(SetRange_Fixed)で作った Range を、そのまま渡す
・最終行をどう決めるか(但し書きの行を除く、など)は、範囲を作る呼び出し側で決める
★ この部品は Sub(プロシージャ)ではなく「Function(関数)」で、成功/失敗を Boolean で返す

基礎区分

土台

用途区分

処理

操作対象区分

範囲

前提条件

★【最重要】この部品は Function(関数)であり、戻り値(Boolean)を返す
  → 消去できた場合は True、実行時にできなかった場合は False(この場合は、エラーでは止まらない)
  → 呼び出し側は、必ず戻り値を確認してから後続処理を行い、メッセージも呼び出し側で表示する
★【最重要】範囲(vRng)は、範囲設定部品などで作った Range を渡す(Set 済みであること)
  → 範囲は、自分がどのブック・どのシートのものかを持っているので、ブックやシート名の引数は不要
・消去されるのは「値だけ」(書式・罫線・色・入力規則は残る)
・消去は元に戻せない(確認なしで消去される)。消してはいけない行(見出し行など)が、範囲に
  含まれていないか、呼び出し側で確認する
・設定の誤りは、False ではなく、原因を示すエラーで止まる(Err.Raise)
    - 範囲(vRng)が Nothing(vbObjectError + 1014)
・Offset / Find / Resize / With は禁止

依存関係(部品)

・なし(土台の部品。他の部品を参照しない。単独で使用可能)
・組み合わせ:f_SetRange_Fixed → f_ClearRange_Contents
  (範囲設定_固定で、消す範囲を作ってから、渡す)
・転記の前に、転記先の範囲を消去する用途で使うことが多い

依存関係(シート)

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

引数

vRng : 消去する範囲(Range)。範囲設定部品などで作った、Set 済みの範囲

戻り値

Boolean : 消去できた場合は True、実行時にできなかった場合は False

戻り値の型

Boolean

コード全文

Function 部品_範囲消去_値のみ(ByVal vRng As Range) As Boolean

    部品_範囲消去_値のみ = f_ClearRange_Contents(vRng)

End Function

Function f_ClearRange_Contents(ByVal vRng As Range) As Boolean

    f_ClearRange_Contents = False

    If vRng Is Nothing Then
        Err.Raise vbObjectError + 1014, "f_ClearRange_Contents", _
                  "範囲(vRng)が設定されていません(Nothing)。"
    End If

    On Error GoTo ErrHandler

    vRng.ClearContents

    f_ClearRange_Contents = True
    Exit Function

ErrHandler:
    Debug.Print "f_ClearRange_Contents: " & Err.Number & " " & Err.Description
    f_ClearRange_Contents = False

End Function

呼び出し・活用事例

<例1:見出し(2行目)の下のデータを、A列~D列で消去する>
Dim lastRow As Long
Dim rng As Range

lastRow = 部品_最終行取得(ThisWorkbook, "転記先", 1)     '1列目で最終行を取得
Set rng = 部品_範囲設定_固定(ThisWorkbook, "転記先", 3, 1, lastRow, 4)

If 部品_範囲消去_値のみ(rng) = False Then
    MsgBox "消去に失敗しました(シートの保護などを確認してください)"
    Exit Sub
End If

<例2:表の下の但し書き(2行)を除いて消去する>
lastRow = 部品_最終行取得(ThisWorkbook, "帳票", 1)
lastRow = lastRow - 2                                    '但し書きの2行を除く
Set rng = 部品_範囲設定_固定(ThisWorkbook, "帳票", 3, 1, lastRow, 5)

If 部品_範囲消去_値のみ(rng) = False Then MsgBox "消去に失敗しました"

<例3:開いたファイルの範囲を消去する>
Dim wbDst As Workbook

If 部品_ファイルを開く("E:\TEST\テンプレート.xlsx") = False Then Exit Sub
Set wbDst = ActiveWorkbook                               '開いた直後に控える

Set rng = 部品_範囲設定_固定(wbDst, "帳票", 3, 1, 20, 5)
If 部品_範囲消去_値のみ(rng) = False Then MsgBox "消去に失敗しました"

※ 範囲が Nothing の場合は、False ではなく、原因を示すエラーで止まる
   (起点の On Error で受けて、Err.Description を表示する)

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

ClearRange_Contents.bas

バージョン

1.0

更新日

2026-10-28