VBA再入門
シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
公開日:2015-10-05 最終更新日:2020-09-26

第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)


マクロVBAで同形式のシートを大量に作るときは、
事前に雛形としてのシートを作成しておき、それをコピーして複数シートを作成します、


また、新規シートを挿入したり、不要になったシートを削除したりと、
VBAではシートを操作することがとても多いものです。

シートのコピー

シート名を右クリックすると、

マクロ VBA 参考画面

ここで、「移動またはコピー」

マクロ VBA 参考画面

このダイアログ画面での指定方法により、
色々なシートのコピーが出来ます。

新しいブックにコピー

マクロ VBA 参考画面

このように指定すると、
新規ブックが作成され、右クリックしたシートが先頭シートとして作成されます。
この時のマクロVBAコ-ドが、

Worksheets("Sheet1").Copy

このようにシートに対して、.Copyだけ書くと、
新規ブックにシートがコピーされます。

同一ブック内にコピー

マクロ VBA 参考画面

末尾へコピーする場合のマクロVBAコード
Worksheets("Sheet1").Copy after:=Worksheets(Worksheets.Count)

after:=
に続けて、コピー先を指定します。
指定のシートの後ろにコピーされます。

Worksheets.Count
これはブックのシート数なので、
Worksheets(Worksheets.Count)
これが最終シートになりますので、
結果として、最終シートの後ろ、つまりは末尾にコピーされます。

before:=
と書けば、指定のシートの手前にコピーされます。

先頭にコピーする場合のマクロVBAコード
Worksheets("Sheet1").Copy before:=Worksheets(1)

1番目のシートの前にコピーされます。

シートの移動

マクロVBAではあまり使う事はありませんが、
Copy
の代わりに、
Move
と書けば、移動になります。

Sheet1を末尾にコピーして、名前を「コピーされたシート」にします。
マクロ VBA 参考コード

コピーされたシートは必ずアクティブシートになります。

シートの挿入

新規シートを挿入する場合は、

Worksheets.Add

これだけ書けば、シートが挿入されます。
アクティブシートの直前に新規シートが挿入されます。

新規シートを挿入して、名前を「新規シート」にします。

マクロ VBA 参考コード

挿入されたシートは必ずアクティブシートになります。

Worksheets.Add

このAddは、Worksheetオブジェクトのメソッドで、
戻り値として、挿入されたシートのオブジェクトを戻します。
そこで、Setで変数に入れる事が出来ます。

マクロ VBA 参考コード

このように、挿入したシートをSetで直ぐに変数に入れておけば、
後々でシート指定で困ることが無くなります。

以下のように、
Addの戻り値のオブジェクトをWithに指定することもできます。

マクロ VBA 参考コード

End Withの下でも使う可能性がありそうなら、Setで変数に入れておいたほうが良いでしょう。

シートの削除

シートを削除する場合は、

Worksheets("Sheet1").Delete

しかし、シートを削除しようとすると、

マクロ VBA 参考画面

このメッセージが表示されます。
これはマクロVBAで削除した場合も同じです。

1つくらいのシートなら、「削除」を押せばよいとも言えますが、
多数のシートを削除する場合は困ります。
何より、メッセ-ジでマクロが中断してしまっては、自動化の妨げになります。

このメッセージが表示されずにシートが削除されるようにするには、
削除の前(マクロVBAの先頭で良い)に、

Application.DisplayAlerts = False

とだけ書いておくことで、
上記のメッセージが表示されることなくシートが削除されます。

マクロ VBA 参考コード

メソッドの戻り値

上記では、Addの結果をSetで変数に入れたり、Withに指定したりしました。
しかし、Copyではそのような書き方ができませんでした。
それは、Addは戻り値として追加したシートを戻しますが、Copyは戻り値が無いからです。
VBEで以下のように、
AddやCopyの後に、半角スペースを入力すると、その構文がヒント表示されます。

マクロ VBA 参考コード

マクロ VBA 参考コード

Addの最後は、
As Object
となっていますが、Copyにはこれがありません。
このAs Objectが、戻り値を意味します。
As Objectの意味まで理解しなくても構いません。
戻り値があるメソッドかどうかを確認する時の材料として見てください。

メソッドには、戻り値を返すメソッドと返さないメソッドがあります。

戻り値があり、実行した結果作成されたオブジェクトを戻すメソッドの場合は、
Set 変数 = オブジェクト.メソッド
または、
With オブジェクト.メソッド
このように書くことで、作成されたオブジェクトを簡単に特定できるようになります。

ExcelマクロVBA入門の対応ページ

第65回.シートの挿入、名前の変更(Add,Name)
・シートの挿入 ・シートの名前変更 ・シート挿入、名前変更の実践例

第66回.シートのコピー・移動・削除Copy,Move,Delete)
・シートのコピー・移動 ・シートの削除 ・シートのコピー・移動・削除の関連記事



同じテーマ「マクロVBA再入門」の記事

第15回.手作業で出来なければマクロは書けない
第16回.エクセルの機能を上手に使う
第17回.セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)
第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)
第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)
第20回.全てのシートに同じ事をする(For~Worksheets.Count)
第21回.ファイル一覧を取得する(Do~LoopとDir関数)
第22回.複数ブックよりデータを集める
第23回.複数のプロシージャーを連続で動かす(Callステートメント)
第24回.マクロの呪文を追加してボタンに登録(ScreenUpdating)
第25回.月別ブックより部署別シートに担当別に集計するNo1


新着記事NEW ・・・新着記事一覧を見る

ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ