エクセルマクロ(EXCEL VBA)

エクセルマクロ(EXCEL VBA) その14 シートの複製(Sheets Copy)

シートを複製する

ここまでで、結構色々なことをご紹介してきたので、かなり、いろんなことができるようになってきた・・・はずです。
今回はシートの複製についてご紹介します。

マクロでエクセルのデータを扱うときに、とても危険なことがあります。
それは、思ってもみないセルを指定してしまっていて、ヘンな文字や数字を書き込んでしまうことです。

実は僕もセルの指定をよく間違うので、いちいち「ここかな?」と探りながらやっているのですが、マクロでヘンな数字を書き込んでしまうと、「Ctrl+Z」や「やり直しボタン」で戻れないのでとても危険です。

ということで、大事なデータを扱うときは、一旦シートを丸ごとコピーしてから作業すると安全です。
なにしろ、元のデータはいじらないわけなので。

 
まず、こういう表があったとします。

表があったとして

このSheet1をコピーしてみます。

開発→Visual Basic
挿入→標準モジュールを押して、

Sub sheet_copy()
Sheets("sheet1").Copy
End Sub

と、打ち込んでください。

シートをコピー

これを実行すると新規ブックが作成されて、そこに今のSheet1がコピーされました。
もう一つブック(エクセルファイル)が生成されてもいい場合はいいんですが、そうじゃなくて、シートだけをコピーしたいので、もう少し書き込みます。

Sheets("sheet1").Copy after:=Sheets("sheet1")

と書き足してください。

afterを書き足す

これを実行すると

シートがコピーされた

このように、sheet1の後に、Sheet1(2)という名前でコピーすることができました!
ちゃんと数値はそのままななので大丈夫そうです。

ちなみに、先程 after と書いたところを Before とすると、sheet1の前にSheet1(2)が入ります。

 
ところで、名前が Sheet1(2)だと意味が分かりにくいというときがあるかもしれません。
「整理用」というシート名にしたいと思ったら、どうすればよいでしょうか?

 
シートをコピーし終わったとき、そのコピー先のシート(ここではSheet1(2))がアクティブになっています。
なので、続けてアクティブシートの名前を変えるという命令を出します。

ActiveSheet.Name = "整理用"

と、追記してください。

整理用を追加

これを実行すると

整理用のシートができた

うまくシートをコピーして、整理用という名前を付けることができました。

次回は、実際にこのシートの内容を整理してみます。

今回の最終的なコード

Sub sheet_copy()
Sheets("sheet1").Copy after:=Sheets("sheet1")
ActiveSheet.Name = "整理用"
End Sub

宿題-14
整理用シートをコピーして、Sheet1の前に「劇場リスト」という名前のシートを作ってください。

エクセルマクロ(EXCEL VBA) その15 行や列の挿入と削除(Insert Delete)
 
(文:森脇孝/エントレ)

関連記事一覧