Return to VBA Code Examples

VBA ワークシートのコピー

このチュートリアルでは、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