VBA シートをコピーする方法

VBAを利用して、EXCELシートのコピーを行う方法を紹介していきます。
シートのコピーを行うには、Copyメソッドを利用しましょう。

 

Copy 任意のシートをコピーする

Copyメソッドの利用方法を見てみましょう。

Worksheets("コピー元シート").Copy Before(もしくはAfter) := コピー先の基準となるシート

パラメータにBeforeを指定した場合は、「コピー先の基準となるシート」の前にコピーを行います。
パラメータにAfterを指定した場合は、「コピー先の基準となるシート」の後にコピーを行います。

 

例を見てみましょう。
「Sheet1」のみ存在するEXCELがあり、「Sheet1」のコピーを「Sheet1」の前に作成してみましょう。

Private Sub btnCopy_Click()
    '指定したシートの前
    Worksheets("Sheet1").Copy before:=Worksheets("Sheet1")
End Sub

 

結果
引数にBeforeを設定しているので、「Sheet1」の前に「Sheet1 (2)」という名前でコピーが作成されました。
 

今回の例ではBeforeを使用していますが、引数にAfterを設定すると「Sheet1」の後ろに作成されます。

 

Copy コピーしたシートの名前を変更する

先ほどの例で、コピーを作成することができましたが、シートの名前が「Sheet1 (2)」になってしまったので、名前を変更しましょう。

シートの名前は、Nameメソッドで変更できます。

コピーした直後は、シートが選択されている状態なので、「ActiveSheet」を利用することもできます。

Private Sub btnCopy_Click()

    '指定したシートの前
    Worksheets("Sheet1").Copy Before:=Worksheets("Sheet1")

    'シート名変更
    ActiveSheet.Name = "hironimo"

End Sub

 

結果

シートの名前が変更されていますね。

インデックスを利用し、シート名の変更

インデックスを利用した方法も紹介しておきます。
インデックスでシートを指定する方法がより間違いがなくなると思うので是非参考にしてみてください。

Private Sub btnCopy_Click()

    '指定したシートの前
    Worksheets("Sheet1").Copy Before:=Worksheets("Sheet1")
    
    '「Sheet1」のインデックスを取得
    Dim sht_index As Integer
    sht_index = Worksheets("Sheet1").index
    
    'インデックスを指定して名称を変更
    Worksheets(sht_index - 1).Name = "hironimo"
    
    '1行で書くと
    'Worksheets(Worksheets("Sheet1").Index - 1).Name = "hironimo"
    
End Sub

解説
3-4行目 :シートのコピーを作成する。
6-8行目 :Sheet1のインデックスを取得する。※インデックスとはシートの順番(索引
10-11行目:コピーをBeforeで作成しているため、「Sheet1のインデックス - 1」 がコピーで作成されたシート(hironimo)のインデックスとなる。
Worksheets(作成したシートのインデックス).Name で作成したシートの名前を変更している。
13-14行目:6-11行目の内容を1行で記載すると14行目のようになる。

結果
結果は先ほどと同じになります。

 

Copy 先頭にシートをコピー

とにかくシートの先頭にコピーを追加する場合は、先頭のシートをインデックスで「1」を指定しBeforeを利用しましょう。

Private Sub btnCopy_Click()

    '先頭にコピー
    Worksheets("Sheet1").Copy Before:=Worksheets(1)
        
End Sub

 

Copy シートの最後にコピー

シートの最後にコピーを追加する場合は、シートの件数をインデックスに指定しAfterを利用しましょう。

Private Sub btnCopy_Click()

    '最後にコピー
    Worksheets("Sheet1").Copy after:=Worksheets(Worksheets.Count)
        
End Sub

 

まとめ

本記事では、VBAを利用し、シートをコピーする方法を紹介しました。

Worksheets("コピー元シート").Copy Before(もしくはAfter) := コピー先の基準となるシート

シートの名称やインデックスを利用し、シートを指定を行いコピーしましょう。

ワークシートのコピーメソッドの使い方を是非参考にしてみてください。

 

 

EXCEL VBAの記事一覧

おすすめの記事