和風スパゲティのレシピ

日本語でコーディングするExcelVBA

シートを新規ブックにコピー/移動する

ワークシートを新しいブックにコピー/移動する方法を紹介します。

この方法はとても簡単で、

Worksheets("○○").Copy

これでOKです。


移動する場合は、

Worksheets("○○").Move

こうですね。


WorksheetオブジェクトのCopyメソッドは、引数「Before/After」にコピー先のシートを指定して実行しますが、
引数を省略した場合は「コピー/移動したシートのみの新しいブック」を出力します。


非常に簡単なコードで済みますので、
是非とも覚えておきましょう。

コピー/移動後にそのシートを編集する場合

コピー/移動後にそのシートを編集する場合は、Copy/Moveメソッドの特徴である、
完了後はそのシートがアクティブになっていることを利用します。

Worksheets("○○").Copy

Dim 出力シート As Worksheet
Set 出力シート = ActiveSheet

出力シート.Name = "□□"
出力シート.Range("A1") = 1

このように、コピー直後にActiveSheetを変数にSetすることで、
コピーしたシートを編集するコードを書くことができます。


なお、完了後にそのシートがアクティブになっているからと言って、

Worksheets("○○").Copy

ActiveSheet.Name = "□□"
Range("A1") = 1

こんな風にアクティブシートに直接処理をするのはなるべくやめましょう。

「シートを新しいブックにコピーする」処理を書くようなマクロでは、
いつActiveSheetが変わってもおかしくないですからね。


VBAを覚えたての頃は、こういった記述もわかりやすくてよいのですが、
ブック・シート間のやりとりが複雑になると、ActiveSheetに頼ったコーディングはバグの元になります。

処理するシートをしっかり変数に入れて、RangeやCellsの親シートを省略しないマクロを書くようにしましょう。

おまけ:ちょっとカッコよくVBAを使ってみる

さてメインの説明はこれで終わりなのですが、今回紹介した、

Worksheets("○○").Copy

このコードはものすごく簡単ですよね?


「シートを新規ブックにコピーする」という操作をエクセル上で行うために、
シート上で右クリックをして表示させる

シートのコピーダイアログ

このダイアログ操作をするよりも、コードを書く方が簡単なレベルです。


なので、例えば、

Sub temp()
    ActiveSheet.Copy
End Sub

こんなマクロを作って即行で実行すると、
Excelでマウスをぐりぐりするより早かったりするわけですが、
これをさらに早く実行する方法があります。


イミディエイトウィンドウと呼ばれる機能で、
VBE(マクロを書く画面)上でCtrl+Gを押すと現れます。

イミディエイトウィンドウ

ここに↑の画像のようにコードを入力してEnterを押すと、
このコードが即時実行されます。

Subプロシージャなどの、実行用の設計が一切不要!


便利だし早いし、プログラマになった気分になれますね。



VBAを勉強していくと、このイミディエイトウィンドウがかなり重要になってきます。

知らなかった人は、ちょうどいい機会なので使ってみましょう。


「ActiveSheet.Copy」は、私の知る中で

 実際のExcel上の操作 >> 打つコードの量

となる、筆頭のコードです。


まずはこれを使いながら、イミディエイトウィンドウに慣れておくと、
あとあといろいろなことを学ぶときのいいとっかかりになると思います。

気が向いたら使ってみてください。


使うなら、

あcsc ⇒ ActiveSheet.Copy
あcsm ⇒ ActiveSheet.Move

の辞書登録を忘れずに!