VBA ワークシートのコピー

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 8月 1, 2022

このチュートリアルでは、VBAを使用してシートまたはワークシートをコピーする方法について説明します。

ワークシートを新しいワークブックにコピーする

ワークシートを新しいワークブックにコピーします。

Sheets("Sheet1").Copy

アクティブシートを新しいワークブックにコピーする

アクティブシートを新しいワークブックにコピーします。

ActiveSheet.Copy

複数のシートを新しいワークブックにコピーする

選択されている複数のシートを新しいワークブックにコピーします。

ActiveWindow.SelectedSheets.Copy

同じワークブック内のシートをコピーする

まず、最も簡単なシートをコピーする例として、シート(複数可)を新しいワークブックにコピーする方法を紹介しました。 以降の例では、同じワークブック内でシートをコピーします。ワークブック内でシートをコピーする場合、コピー先の場所を指定しなければなりません。 場所を指定するには、ワークシートを他のワークシートの前または後に移動するように VBA に指示します。

シートを他のシートの前にコピーする

ここでは、Sheet2 の前にシートをコピーして貼り付けるように指定します。

Sheets("Sheet1").Copy Before:=Sheets("Sheet2")

最初のシートの前にシートをコピーする

シート名を指定する代わりに、シートの位置を指定することもできます。ここでは、ワークブックの最初のシートの前にあるシートをコピーして貼り付けています。

Sheets("Sheet1").Copy Before:=Sheets(1)

新しく作成されたシートは、Workbook の最初のシートとなります。

vba copy before first sheet jp

最後のシートの後にシートをコピーする

Afterプロパティを使って、シートを他のシートの後に貼り付けるようにVBAに指示します。ここでは、ワークブック内の最後のシートの後にシートをコピーして貼り付けます。

Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)

ワークブック内のシートの数を数えるためにSheets.Countを使用していることに注意してください。vba copy after last sheet jp

シートを移動する

同様の構文で、ワークブック内のシートを移動させることもできます。このコードでは、Sheet1 を Workbook の最後に移動させます。

Sheets("Sheet1").Move After:=Sheets(Sheets.Count)

コピーしたシートに名前を付ける

シートをコピー&ペーストすると、新しく作成されたシートがActiveSheetになります。したがって、新しいシートの名前を変更するには、単にActiveSheet.Nameを使用します。

Sub CopySheetRename1()

Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "LastSheet"

End Sub

シート名がすでに存在する場合、上記のコードではエラーが発生します。 代わりに、「On Error Resume Next」を使って、シートの名前を無視して残りの処理を進めるようにVBAに指示することができます。

Sub CopySheetRename2()

    Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
    On Error Resume Next
    ActiveSheet.Name = "LastSheet"
    On Error GoTo 0

End Sub

もしくは、私達が作成したRangeExists 関数を使用して、シートをコピーする前にシート名がすでに存在するかどうかをテストします。

Sub CopySheetRename3()

    If RangeExists("LastSheet") Then
        MsgBox "シートはすでに存在しています。"
    Else
        Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "LastSheet"
    End If

End Sub

Function RangeExists(WhatSheet As String, Optional ByVal WhatRange As String = "A1") As Boolean
    Dim test As Range
    On Error Resume Next
    Set test = ActiveWorkbook.Sheets(WhatSheet).Range(WhatRange)
    RangeExist = Err.Number = 0
    On Error GoTo 0
End Function

セルの値からシートをコピーして名前をつける

また、セルの値に基づいてシートをコピーし、名前を付けたい場合があります。 このコードでは、A1のセルの値に基づいてワークシートに名前を付けます。

Sub CopySheetRenameFromCell()

    Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
    On Error Resume Next
    ActiveSheet.Name = Range("A1").Value
    On Error GoTo 0

End Sub

ワークシートを別のワークブックにコピーする

これまで私たちは、ワークブック内のシートをコピーする作業を行ってきました。今度は、シートを他のワークブックにコピー&ペーストする例を取り上げます。このコードは、シートを他のワークブックの先頭にコピーします。

Sheets("Sheet1").Copy Before:=Workbooks("Example.xlsm").Sheets(1)

ワークシートを別のワークブックの末尾にコピーします。

Sheets("Sheet1").Copy After:=Workbooks("Example.xlsm").Sheets(Workbooks("Example.xlsm").Sheets.Count)

最後のワークシートを取得するために、1を Workbooks(“Example.xlsm”).Sheets.Countに置き換えていることに注意してください。

ワークシートを閉じたワークブックにコピーする

また、ワークシートを閉じているワークブックにコピーしたい場合もあります。 このコードでは、閉じたワークブックを開き、そこにシートをコピーすることができます。

Sub CopySheetToClosedWB()
Application.ScreenUpdating = False

    Set closedBook = Workbooks.Open("example.xlsm")
    Sheets("Sheet1").Copy Before:=closedBook.Sheets(1)
    closedBook.Close SaveChanges:=True

Application.ScreenUpdating = True
End Sub

別のワークブックを開かずに、そのワークブックからシートをコピーする

逆に、このコードは閉じたワークブックからワークシートをコピーするもので、手動でワークブックを開く必要はありません。

Sub CopySheetFromClosedWB()
Application.ScreenUpdating = False

    Set closedBook = Workbooks.Open("example.xlsm")
    closedBook.Sheets("Sheet1").Copy Before:=ThisWorkbook.Sheets(1)
    closedBook.Close SaveChanges:=False

Application.ScreenUpdating = True
End Sub

これらの例では、ScreenUpdatingを無効にして、バックグラウンドで処理を実行していることに注意してください。

エクセルシートを複数回複製する

ループを使用すれば、Excelシートを複数回複製することも可能です。

Sub CopySheetMultipleTimes()
Dim n As Integer
Dim i As Integer

    n = InputBox("何枚コピーしますか?")

    If n > 0 Then
        For i = 1 To n
            ActiveSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count)
        Next
    End If

End Sub

vba duplicate sheet jp

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples