目次

Before,After を指定しない場合

今回は Excel のワークシートをコピーして、コピーしたワークシートのみが存在する新規ワークブックを作成するマクロを試してみました。

「Worksheets」オブジェクトの「Copy」メソッドで「Before」「After」を指定しない場合、新規ワークブックが作成されて、そこにワークシートがコピーされるようです。

目次まで戻る

題材のワークブック

ワークシートをコピーする元のワークブックとして「Book1.xls」を準備しました。マクロの実行もこのブックから行います。

「Book1.xls」には「Sheet1」「Sheet2」「Sheet3」が存在していて、コピーした結果が分かりやすいように各シートに「1」「2」「3」の数字が入力してあります。

「Book1.xls」の「Sheet1」
「Book1.xls」の「Sheet1」
「Book1.xls」の「Sheet2」
「Book1.xls」の「Sheet2」
「Book1.xls」の「Sheet3」
「Book1.xls」の「Sheet3」

目次まで戻る

マクロの一例

「Book1.xls」の「Sheet1」のみがコピーされた「1.xls」を作成するマクロを書いてみました。題材のワークブック「Book1.xls」から実行してみます。

Sub Sheet1がコピーされた新規ワークブックを作成()

'コピー元のワークブック
Dim a As String
a = ActiveWorkbook.Path '保存先フォルダ
Debug.Print ActiveWorkbook.Name '出力結果= Book1.xls
Worksheets("Sheet1").Copy 'Before,After を指定していない

'コピー先のワークブック
Debug.Print ActiveWorkbook.Name '出力結果= Book1
ActiveWorkbook.SaveAs a & "\" & "1.xls" '別名保存
Debug.Print ActiveWorkbook.Name '出力結果= 1.xls
ActiveWorkbook.Close '1.xls を閉じる

End Sub

マクロを実行すると、「Book1.xls」と同じフォルダに「1.xls」が作成されました。

1.xls が作成されている。
1.xls が作成されている。

「1.xls」を開いてみると以下の画像のようになっていました。 1,1,1 ... と数字が並んでいるので、「Sheet1」がコピー出来たようですね。

「1.xls」の「Sheet1」。
「1.xls」の「Sheet1」。

以下の部分の出力結果が「Book1」となっているのは、保存前のワークブックだからだと思います。

'コピー先のワークブック
Debug.Print ActiveWorkbook.Name '出力結果= Book1

目次まで戻る

複数のワークシートをコピー

「Book1.xls」の「Sheet2」と「Sheet3」をコピーして「2-3.xls」を作成するマクロも書いてみました。

Sub Sheet2とSheet3がコピーされた新規ワークブックを作成()

'コピー元のワークブック
Dim a As String
a = ActiveWorkbook.Path
Debug.Print ActiveWorkbook.Name '出力結果= Book1.xls
Worksheets(Array("Sheet2", "Sheet3")).Copy 'Array 関数で配列を指定している

'コピー先のワークブック
Debug.Print ActiveWorkbook.Name '出力結果= Book2
ActiveWorkbook.SaveAs a & "\" & "2-3.xls"
Debug.Print ActiveWorkbook.Name '出力結果= 2-3.xls
ActiveWorkbook.Close

End Sub

マクロを実行すると、「Book1.xls」と同じフォルダに「2-3.xls」が作成されました。

2-3.xls が作成されている。
2-3.xls が作成されている。

「2-3.xls」を開いてみると「Sheet2」「Sheet3」がコピー出来ていました。

「2-3.xls」の「Sheet2」。
「2-3.xls」の「Sheet2」。
「2-3.xls」の「Sheet3」。
「2-3.xls」の「Sheet3」。

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿