« VBAで名前の定義を扱う | トップページ | パターン一覧 »

2020年6月 9日 (火)

シートをコピーする

VBAでシートをコピーする方法について以下の項目を見ていきます。
1. 元シートの前または後にシートをコピーする
2. 全シートの左端または右端にシートをコピーする
3. シートをコピーした後に名前を変更する
4. 新しいブックにシートをコピー
5.シートを既存ブックにコピーする
6. 複数のシートをコピーする

  1. 元シートの前または後にシートをコピーする

    シートのコピーはCopyメソッドを使います。
    Copyメソッドの引数Beforeに既存シートを指定すると
    指定したシートの前にコピーされます。
    Copyメソッドの引数Afterに既存シートを指定すると
    指定したシートの後ろにコピーされます。
    引数Before,Afterはどちらか一方のみ指定します。

    次のコードはコピー元シートの前,後ろにシートをコピーします。

    同じブック内でシートをコピーするコード:

    Sub macro20200609a()
    'コピー元シートの前にシートをコピーする

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

    End Sub
    Sub macro20200609b()
    'コピー元シートの後ろにシートをコピーする

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

    End Sub

 

  1. 全シートの左端または右端にシートをコピーする

    ブックに含まれるすべてのシートは
    Sheetsオブジェクトに格納されています。
    シートは左端からSheet(1),Sheet(2),…で参照できます。
    すべてのシートの数はSheets.countで取得できます。

    左端のシートはSheet(1),
    右端のシートはSheets(Sheets.count)で参照できます。

    次のコードは左端または右端にシートをコピーします。

    左端または右端にシートをコピーするコード:

    Sub macro20200609c()
    'シートを左端にコピーする

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

    End Sub
    Sub macro20200609d()
    'シートを右端にコピーする

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

    End Sub

 

  1. シートをコピーした後に名前を変更する

    シートをコピーすると通常
    コピー元のシート名に(1),(2),…などと数字が付加されます。

    コピーしたシートの名前を付けたい場合は
    Nameプロパティで設定します。

    次のコードはシートをコピー後
    コピーしたシートの名前を変更します。

    シートをコピー後,コピーしたシートの名前を変更するコード:

    Sub macro20200609e()
    'シートをコピーする

        Dim sh As Worksheet
       
        Sheets("Sheet1").Copy Before:=Sheets("Sheet1")
        Set sh = ActiveSheet
        sh.Name = "新しいシート名"

    End Sub

 

  1. 新しいブックにシートをコピー

    CopyメソッドのBefore,After引数を指定しないと
    新しいブックが作成されてシートがコピーされます。

    次のコードは
    新しいブック(NewBook1.xlsx)にシートをコピーして
    ブックに名前を付けて閉じます。

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

    Sub macro20200609f()
    'シートを新しいブックにコピーする

        Dim wb As Workbook
       
        Sheets("Sheet1").Copy
        Set wb = ActiveWorkbook
        wb.SaveAs Filename:="C:\Users\username\Documents\NewBook1.xlsx"
        wb.Close

    End Sub

 

  1. シートを既存ブックにコピーする

    次のコードは
    既存ブック(Book1.xlsx)を開いてシートをコピーして,
    コピー後にコピー先ブックを保存して閉じます。

    シートを既存ブックにコピーするコード:

    Sub macro20200609g()
    'シートを既存ブックにコピーする

        Dim wb1 As Workbook 'コピー元
        Dim wb2 As Workbook 'コピー先
       
        Set wb1 = ActiveWorkbook
       
        Workbooks.Open Filename:="C:\Users\username\Documents\Book1.xlsx"
        Set wb2 = ActiveWorkbook
       
        wb1.Sheets("Sheet1").Copy Before:=wb2.Sheets(1)
        wb2.Close SaveChanges:=True

    End Sub

 

  1. 複数のシートをコピーする

    複数のシートを指定する場合は
    Array関数を使用します。

    シート名"Sheet5"を指定する場合に
    Sheets("Sheet5")としました。
    例えば,
    シート名が"Sheet1", "Sheet2", "Sheet4"の
    3枚のシートを指定したい場合
    Sheets(Array("Sheet1", "Sheet2", "Sheet4"))のようにします。

    複数のシートをコピーするコード:

    Sub macro20200609h()
    '複数のシートをコピーする

        Dim wb1 As Workbook 'コピー元
        Dim wb2 As Workbook 'コピー先
        Dim sh_copy As Sheets
       
        Set wb1 = ActiveWorkbook
       
        Workbooks.Open Filename:="C:\Users\username\Documents\Book1.xlsx"
        Set wb2 = ActiveWorkbook
       
        Set sh_copy = wb1.Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
        sh_copy.Copy Before:=wb2.Sheets(1)
        wb2.Close SaveChanges:=True

    End Sub

 

使用Ver:Win10, Excel For Office365

|

« VBAで名前の定義を扱う | トップページ | パターン一覧 »

コメント

この記事へのコメントは終了しました。