部品_シートコピー
CopySheet
https://feelcodelab.com/vba_parts/copysheet/
・指定したシート(Worksheet)を、指定した別のシートの「後ろ」へ、コピーする(値・数式・書式のすべて) ・雛形のシートをコピーして、帳票を作る、などに使う(コピーしたシートの名前は、シート名変更の部品で付ける) ※ この部品は Sub(プロシージャ)ではなく「Function(関数)」で、成功/失敗を Boolean で返す
土台
処理
シート
・【最重要】この部品は Function(関数)であり、戻り値(Boolean)を返す
→ コピーできた場合は True、実行時にできなかった場合は False(この場合は、エラーでは止まらない)
→ 呼び出し側は、必ず戻り値を確認してから後続処理を行い、メッセージも呼び出し側で表示する
(False のときは、MsgBox のあとに Exit Sub まで書く)
・【最重要】コピー元(vSrcWs)と、コピーの位置の基準(vAfterWs)は、どちらも Worksheet で渡す
→ ブックは、Worksheet が持っているので、ブックの引数は不要。vAfterWs が別のブックのシートなら、そのブックへコピーする
→ ブックの最後へコピーしたいときは、そのブックの最後のシートを、vAfterWs に渡す
(例:wbDst.Worksheets(wbDst.Worksheets.Count))
・コピーされたシートの名前は、Excel が、自動で付ける(例:「雛形 (2)」)。名前を付けたいときは、
コピーの直後に、シート名変更の部品を使う
・同じブック内へコピーした直後は、コピーしたシートが、そのブックの、アクティブなシートになる
→ 転記系の部品の、シート名 "ActiveSheet" の指定は、この動きを使う
→ 別のブックへコピーした場合は、動きを確認してから使う(確認していない)
・コピーされるのは、値・数式・書式のすべて。シートの中の、ボタンや図形も、コピーされる
・非表示のシートも、コピーできる(コピーも、非表示のまま)
・ブックの構成が保護されているときなど、実行時にできなかった場合は False を返す(原因は、イミディエイトウィンドウに出る)
・設定の誤りは、False ではなく、原因を示すエラーで止まる(Err.Raise)
- コピー元・位置の基準が Nothing(vbObjectError + 1006)
・Offset / Find / Resize / With は禁止・他の部品を参照しない(土台) ・組み合わせ:シートコピー → シート名変更 (コピーした直後の、アクティブなシートに、名前を付ける) ・組み合わせ:シート存在チェック → シートコピー (コピー元の雛形シートが、あるかを、先に確認する) ・組み合わせ:シートコピー → 転記_セル単位 / 転記_列単位 (コピーした帳票へ、転記する。転記先のシート名は "ActiveSheet" と書く)
・コピー元(vSrcWs)と、基準のシート(vAfterWs)は、どちらも Worksheet で渡す(ブックの引数は不要) ・コピーしたシートは、基準のシートの後ろに作られる。名前は、Excel の標準の動き(コピー元の名前に連番)になる ・コピー直後のシートは、アクティブになる(名前は、シート名変更で付ける)
vSrcWs : コピー元のシート(Worksheet)。雛形のシートなど vAfterWs : コピーの位置の基準のシート(Worksheet)。このシートの「後ろ」へ、コピーする
Boolean : コピーできた場合は True、実行時にできなかった場合は False
Boolean
Function 部品_シートコピー( _
ByVal vSrcWs As Worksheet, _
ByVal vAfterWs As Worksheet) As Boolean
部品_シートコピー = f_CopySheet(vSrcWs, vAfterWs)
End Function
Function f_CopySheet( _
ByVal vSrcWs As Worksheet, _
ByVal vAfterWs As Worksheet) As Boolean
f_CopySheet = False
If vSrcWs Is Nothing Then
Err.Raise vbObjectError + 1006, "f_CopySheet", _
"コピー元のシート(vSrcWs)が設定されていません(Nothing)。"
End If
If vAfterWs Is Nothing Then
Err.Raise vbObjectError + 1006, "f_CopySheet", _
"コピーの位置の基準のシート(vAfterWs)が設定されていません(Nothing)。"
End If
On Error GoTo ErrHandler
vSrcWs.Copy After:=vAfterWs
f_CopySheet = True
Exit Function
ErrHandler:
Debug.Print "f_CopySheet: " & Err.Number & " " & Err.Description
f_CopySheet = False
End Function◆例:雛形のシートをコピーして、名前を付け、転記する◆
Dim wbDst As Workbook
Dim wsTemplate As Worksheet
Dim wsLast As Worksheet
If 部品_ファイルを開く("E:\TEST\帳票.xlsx") = False Then MsgBox "開けませんでした": Exit Sub
Set wbDst = ActiveWorkbook '開いた直後に控える
If 部品_シート存在チェック(wbDst, "雛形") = False Then MsgBox "雛形がありません": Exit Sub
Set wsTemplate = wbDst.Worksheets("雛形")
Set wsLast = wbDst.Worksheets(wbDst.Worksheets.Count) 'ブックの最後のシート
If 部品_シートコピー(wsTemplate, wsLast) = False Then MsgBox "コピーに失敗しました": Exit Sub
'→ コピーしたシートは、アクティブになる。名前を付けるには、シート名変更を使う
If 部品_シート名変更(wbDst.ActiveSheet, "2026年10月") = False Then MsgBox "名前を変更できませんでした": Exit Sub
※ コピー元・位置の基準が Nothing の場合は、False ではなく、原因を示すエラーで止まる 1.0
2026-10-30