日本語名

部品_シートコピー

英語名

CopySheet

URL

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 ではなく、原因を示すエラーで止まる

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

CopySheet.bas

バージョン

1.0

更新日

2026-10-30