サイトアイコン エントレ|演劇動画ニュース

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

エクセルマクロ(EXCEL VBA)

シートを複製する

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

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

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

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

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

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

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

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

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

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

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

と書き足してください。

これを実行すると

このように、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の前に「劇場リスト」という名前のシートを作ってください。

▼ クリックで解説を表示

解説

整理用シートは、Sheets(“整理用”)と指定できます。
これをコピーして、Sheet1の前(Before)に置きたいので、

Sheets("整理用").Copy before:=Sheets("sheet1")

と書けばできそうです。
さらに、シートの名前を「劇場リスト」にしたいので、続けて

ActiveSheet.Name = "劇場リスト"

とすれば良いですね。

最終的なコードはこちらです。

Sub hw14_sheetCopy()
Sheets("整理用").Copy before:=Sheets("sheet1")
ActiveSheet.Name = "劇場リスト"
End Sub

答えファイルのダウンロード

エクセルマクロ(EXCEL VBA) その15 行や列の挿入と削除(Insert Delete)

 
(文:森脇孝/エントレ)

モバイルバージョンを終了