ExcelマクロVBA再入門
第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
最終更新日:2018-08-14

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


マクロ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番目のシートの前にコピーされます。

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

・Sheet1を末尾にコピーして、名前を「コピーされたシート」とします。

マクロ VBA 参考コード

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


■シートの挿入

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

Worksheets.Add

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

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

マクロ VBA 参考コード

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

Worksheets.Add

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


マクロ VBA 参考コード

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

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

マクロ VBA 参考コード

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


■シートの削除

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

Worksheets("Sheet1").Delete

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

マクロ 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の意味まで理解する必要はありません。
戻り値があるメソッドかどうかを確認する時の材料として見てください。

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




同じテーマ「マクロ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 ・・・新着記事一覧を見る

Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



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

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


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




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