サイトについて      連絡先   検索

VBA シートをコピーする

はじめに

Excel VBA マクロのシートをコピーする方法を紹介します。

Sheets.Copy メソッドまたは Worksheets.Copy メソッドでシートをコピーできます。

複数まとめてやシートの位置、ワークブックなどを指定できます。

  • 目次
    • シートをコピーする
    • 複数のシートをコピーする
    • コピーしたシートを編集する

シートをコピーする

sheet1

Sheets の引数にインデックスかシート名を指定すると、そのシートをコピーできます。

1 番目のシートをコピーするにはSheets(1).CopyまたはWorksheets(1).Copyを入力します。1 番左のシートが 1 です。


Sheets(1).Copy        ' 1 番目のシートをコピー
Sheets("Sheet1").Copy ' シート「Sheet1」をコピー

Worksheets(1).Copy        ' 1 番目のシートをコピー
Worksheets("Sheet1").Copy ' シート「Sheet1」をコピー

Copy の引数を指定しないと、新しいワークブックにコピーが作成されアクティブになります。

4

Copy の引数を指定して、同じワークブックにコピーでき、アクティブになります。


Call Sheets(1).Copy(Before:=Sheets(2))        ' 指定したシートの前にコピー
Call Sheets(1).Copy(After:=Sheets("Sheet2"))  ' 指定したシートの後ろにコピー
5

引数には次のものがあり、すべて省略できます。

引数「Before」指定したシートの前にコピーします。引数「After」と一緒に指定できません。
引数「After」指定したシートの後ろにコピーします。引数「Before」と一緒に指定できません。

Sheets と Worksheets の違いはワークシート以外を取得するかどうかです。

このためグラフシートなどは Worksheets.Copy でコピーできません。

1 番左や右にコピー

シートを 1 番左にコピーするには、引数にBefore:=Sheets(1)を入力します。

シートを 1 番右にコピーするには、引数にAfter:=Sheets(Sheets.Count)を入力します。


Call Sheets(1).Copy(Before:=Sheets(1))           ' 1 番左にコピー
Call Sheets(1).Copy(After:=Sheets(Sheets.Count)) ' 1 番右にコピー

別のワークブックにコピー

Workbooks の引数にインデックスかブック名を指定すると、そのブックのシートにコピーできます。

ブック名「Book2.xlsx」のブックにコピーするにはWorkbooks("Book2.xlsx").SheetsまたはWorkbooks("Book2.xlsx").Worksheetsのように入力します。


' ブック「Book2.xlsx」のシート「Sheet2」の前にコピー
Call Sheets(1).Copy(Before:=Workbooks("Book2.xlsx").Sheets("Sheet2"))

' 2 番目のブックの 2 番目のシートの後ろにコピー
Call Sheets(1).Copy(After:=Workbooks(2).Sheets(2))

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

1 番目と 2 番目のシートをコピーするにはSheets(Array(1, 2)).CopyまたはSheets(Array("Sheet1", "Sheet2")).Copyのように入力します。


Sheets(Array(1, 2)).Copy               ' 1 番目と 2 番目のシートを移動
Sheets(Array("Sheet1", "Sheet2")).Copy ' シート「Sheet1」と「Sheet2」を移動

Worksheets(Array(1, 2)).Copy               ' 1 番目と 2 番目のシートを移動
Worksheets(Array("Sheet1", "Sheet2")).Copy ' シート「Sheet1」と「Sheet2」を移動

引数に配列でインデックスやシート名を指定します。

コピーしたシートを編集する

コピーしたシートはアクティブになります。ActiveSheetでアクティブなシートを取得できます。


Call Sheets(1).Copy(After:=Sheets(1))
Dim ws As Worksheet
Set ws = ActiveSheet ' コピーしたシートがアクティブ

' そのシートに対して編集
ws.Name = "コピー"
6
  • 目次
    • シートをコピーする
    • 複数のシートをコピーする
    • コピーしたシートを編集する