Excel/VBA

TOP

シートをコピーして新規ブックを作成

シートをコピーして新規ブックを作成する方法の説明画像です

※当サイトで使用する請求書はサンプルの請求書であり、実際に使用されているものではありません。

シートコピー方法

まずは、シートのコピー方法を解説します。
下記画像のテンプレートシートを一番後ろにコピーを行います。

シートをコピーして新規ブックを作成する方法の説明画像です

下記がシートコピーを行うサンプルコードです。
ワークシートオブジェクト.Copyでシートのコピーを行い、Beforeが指定したシートの前、Afterが指定したシートの後ろにコピーされます。 下記の例ではThisWorkbook.Worksheets.Countでシート数を取得し、ブック全体のシートの後ろにシートをコピーしています。

サンプルコード


Sub シートコピー()
    
    'コピーするシートを指定します
    Dim CopyWs As Worksheet
    Set CopyWs = Worksheets("テンプレート")
    
    '一番後ろにシートをコピーします
    CopyWs.Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    
    'リソースの解放
    Set CopyWs = Nothing
    
End Sub
        

実行結果

シートをコピーして新規ブックを作成する方法の説明画像です

シートが一番後ろにコピーされました。

コピーしたシート名を変更したい場合は、下記のサンプルコードのようにワークシートオブジェクト.Name = "シート名"とすることでシート名を変更することができます。

シート名を変更する場合は、他のシート名と名前が被らないように注意しましょう。(カウント処理を行い、シート名に入れ込むなど)

サンプルコード


Sub シートコピー()

    'コピーするシートを指定します
    Dim CopyWs As Worksheet
    Set CopyWs = Worksheets("テンプレート")
    
    '一番後ろにシートをコピーします
    CopyWs.Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    
    'コピーしたシートを変数に格納します
    Dim NewSheets As Worksheet
    Set NewSheets = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    
    'シート名の変更(シート名が被らないようにThisWorkbook.Worksheets.Countでシートのカウントを名前に入れています)
    NewSheets.Name = "新規シート_" & ThisWorkbook.Worksheets.Count
    
    'リソースの解放
    Set CopyWs = Nothing
    Set NewSheets = Nothing
    
End Sub
        

コピーしたシートの名前の変更が行えました。

シートをコピーして新規ブックを作成する方法の説明画像です

ThisWorkbook.Worksheets.Countで一番後ろのシートを取得し名前の変更を行う場合は、非表示のシートがないかをあらかじめ確認して下さい。

非表示のシートが存在している状態で、一番後ろのシートを取得して名前を変更すると、シートの順序がずれてしまい、意図しないシートの名前が変更される可能性があります。

非表示のシートが存在する場合は下記のサンプルコードのように、一度全てのシートを再表示させた後に、シート名を変更する処理を行うことをお勧めします。

サンプルコード


Sub 全てのシートを再表示()

    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets
        Ws.Visible = True
    Next Ws
    
End Sub
        

新規ブックを作成して、既存のシートを新規ブックにコピーする方法

新規ブックを作成するには、Workbooks.Addと記述すると新規ブックが作成されます。
まずは、新規ブックを作成して、既存のシートを新規ブックにコピーする処理から解説します。

下記のサンプルコードは、新規ブックを作成し、既存のシートを新規ブックの一番後ろにコピーをしています。

サンプルコード


Sub 新規ブックを作成()

    'コピーするシートを指定します
    Dim CopyWs As Worksheet
    Set CopyWs = Worksheets("テンプレート")
    
    '新規ブックを作成します
    Dim NewBook As Workbook
    Set NewBook = Workbooks.Add
    
    '新規ブックの一番後ろにコピーします
    CopyWs.Copy After:=NewBook.Worksheets(NewBook.Worksheets.Count)
    
    'リソースの解放
    Set CopyWs = Nothing
    Set NewBook = Nothing
    
End Sub
        

実行結果

シートをコピーして新規ブックを作成する方法の説明画像です

新規ブックが作成され、既存のテンプレートシートが新規ブックにコピーされました。

新規ブックを作成した場合、「Sheet1」など余分なシートも含まれてしまうため、コピーしたテンプレート以外のシートは全て削除します。 下記のサンプルコードをご参考ください。

サンプルコード


Sub 新規ブックを作成()

    'コピーするシートを指定します
    Dim CopyWs As Worksheet
    Set CopyWs = Worksheets("テンプレート")
    
    '新規ブックを作成します
    Dim NewBook As Workbook
    Set NewBook = Workbooks.Add
    
    '新規ブックの一番後ろにコピーします
    CopyWs.Copy After:=NewBook.Worksheets(NewBook.Worksheets.Count)
    
    'テンプレート以外の不要なシートを全て削除します
    '※シートを削除する前に警告を非表示にするためApplication.DisplayAlerts = Falseと一時的に警告が出ないようにしています
    '  削除が完了後は必ず、Application.DisplayAlerts = Trueとして、警告が出るようにしておきましょう
    Application.DisplayAlerts = False
    
    Dim NewBookWs As Worksheet
    For Each NewBookWs In NewBook.Worksheets
        
        'シート名がテンプレートではなかった場合、シートを削除します
        If NewBookWs.Name <> CopyWs.Name Then
            NewBookWs.Delete
        End If
        
    Next NewBookWs
    
    Application.DisplayAlerts = True
    
    
    'リソースの解放
    Set CopyWs = Nothing
    Set NewBook = Nothing
    Set NewBookWs = Nothing
    
End Sub
        

テンプレート以外のシートが削除されました。

シートをコピーして新規ブックを作成する方法の説明画像です

作成した新規ブックに値を入れ、名前を付けて保存する

最後に、新規で作成したブックに値を入れ、名前を付けて保存する処理を解説します。

まずは、マクロブックに入力欄を設け、ボタンを作成します。

シートをコピーして新規ブックを作成する方法の説明画像です

ボタンのマクロには下記のサンプルコードのように、作成した新規ブックに入力欄から転記をする処理を行います。 全ての処理が終わった後に、名前を付けて保存する処理を行います。

サンプルコード


Sub 新規ブックを作成()

    'コピーするシートを指定します
    Dim CopyWs As Worksheet
    Set CopyWs = Worksheets("テンプレート")
    
    '新規ブックを作成します
    Dim NewBook As Workbook
    Set NewBook = Workbooks.Add
    
    '新規ブックの一番右側にコピーします
    CopyWs.Copy After:=NewBook.Worksheets(NewBook.Worksheets.Count)
    
    'テンプレート以外の不要なシートを全て削除します
    '※シートを削除する前に警告を非表示にするためApplication.DisplayAlerts = Falseと一時的に警告が出ないようにしています
    '  削除が完了後は必ず、Application.DisplayAlerts = Trueとして、警告が出るようにしておきましょう
    Application.DisplayAlerts = False
    
    Dim NewBookWs As Worksheet
    For Each NewBookWs In NewBook.Worksheets
        
        'シート名がテンプレートではなかった場合、シートを削除します
        If NewBookWs.Name <> CopyWs.Name Then
            NewBookWs.Delete
        End If
        
    Next NewBookWs
    
    Application.DisplayAlerts = True
    
    '新規で作成したファイルに入力フォームで入力された値を貼り付けます
    Dim InputWs As Worksheet
    Set InputWs = ThisWorkbook.Worksheets("入力シート")
    
    With NewBook.Worksheets(1)
        .Range("H4").Value = InputWs.Range("B2").Value    '発行IDを転記
        .Range("H5").Value = Format(Date, "yyyy年m月d日")  '今日の日付を発行日に記入
        .Range("C9").Value = InputWs.Range("B4").Value    '名前を転記
        .Range("C12").Value = InputWs.Range("B6").Value   '住所を転記
        .Range("D18").Value = InputWs.Range("B8").Value   '請求金額を転記
    End With
    
    '作成したデータを名前を付けて保存(マクロブックと同一のフォルダに保存します)
    NewBook.SaveAs Filename:=ThisWorkbook.Path & "\請求書.xlsx", FileFormat:=xlOpenXMLWorkbook
    
    '新規ブックを閉じる(上記で保存しているため、下記では保存せずに閉じます)
    NewBook.Close SaveChanges:=False
    
    'リソースの解放
    Set CopyWs = Nothing
    Set NewBook = Nothing
    Set NewBookWs = Nothing
    Set InputWs = Nothing
    
End Sub
        

新規ブックが作成されました。

シートをコピーして新規ブックを作成する方法の説明画像です
シートをコピーして新規ブックを作成する方法の説明画像です

ファイル名は請求書.xlsxとして作成していますが、フォルダ内に同じファイル名のファイルがないか確認する必要があります。

同じファイル名が存在した場合、予期しないファイルに上書きしてしまう恐れがあります。

作成前に、こちらの記事を参考にファイルの存在確認を行うようにしましょう。