シートを複製する
ここまでで、結構色々なことをご紹介してきたので、かなり、いろんなことができるようになってきた・・・はずです。
今回はシートの複製についてご紹介します。
マクロでエクセルのデータを扱うときに、とても危険なことがあります。
それは、思ってもみないセルを指定してしまっていて、ヘンな文字や数字を書き込んでしまうことです。
実は僕もセルの指定をよく間違うので、いちいち「ここかな?」と探りながらやっているのですが、マクロでヘンな数字を書き込んでしまうと、「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)
(文:森脇孝/エントレ)