VBAでシートのコピー

VBAでシートのコピーを行う方法です。

シートに対してCopyメソッドを用いて、シートのコピーを行います。
コピー元のシートの右と左のどちらにコピーを作成するかを引数のBefore(元シートの左にコピー)とAfter(元シートの右にコピー)で指定しますが、
その際にAfterとBeforeの両方を指定することはできません。

なお、シートの操作ではコピーの他に、シートの新規追加を行うAddメソッドとシートの移動を行うMoveメソッドがあります。
いずれも使い方はCopyメソッドと似ています。

本題のコピーですが、大きく3通りの方法があります。
Copyメソッドを使うのはいずれも同じですが、コピー元の指定方法が異なります。



1つはシート名を指定する方法です。

もう1つはシートのインデックスを指定する方法です。
インデックスは全シートの一番左が1になり、それ以降の右が1ずつ加算された値になります。
10シートある場合は一番左が1で、一番右が10になります。

もう1つはシートのオブジェクト名を指定する方法です。
以下の例ではコピー元のシートは事前に作成済みでオブジェクト名にshtTempと命名していることが前提です。

個人的には特に条件が無ければオブジェクト名を指定する方法を用いることが多いです。
理由は、Excel操作中にシート名やシートの位置を変更されたりすると動作しなくなるため、それを避けるためです。
そのため、上の例のように隠しシートを作っておき、VBAの画面でシートのオブジェクト名にshtTempなどの名前を付けておいて、それをコピーする方法をよく採ります。

Copyメソッドには利点でもあり欠点でもあるのですが、癖があります。
それはCopyメソッド実行後はCopyしたシートがアクティブになる点です。
個人的には「それバグだろ」、「余計なことすんなよ」と言いたくなる仕様です。

コピーだけしたい場合には、元のアクティブだったシートをおぼえておいて、Copyメソッド後に再度表示するという処理が必要になります。
VBAはこういうおせっかい仕様がいろいろあるので、使ってみて「え?」と思う動きをすることが多々あります。
こればかりは作ってから確認するしかありません。

関連記事

サブコンテンツ

このページの先頭へ