部品_範囲消去_値のみ
ClearRange_Contents
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 を表示する) 1.0
2026-10-28