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 ・・・新着記事一覧を見る

SQL関数と演算子|SQL入門(12月1日)
データの取得:集約集計、並べ替え(DISTINKT,GROUP BY,ORDER BY)|SQL入門(11月30日)
データの取得:条件指定(SELECT,WHERE)|SQL入門(11月29日)
データの挿入:バルクインサート|SQL入門(11月28日)
データの挿入(INSERT)と全削除|SQL入門(11月26日)
テーブル名変更と列追加(ALTER TABLE)とテーブル自動作成|SQL入門(11月25日)
テーブルの作成/削除(CREATE TABLE,DROP TABLE)|SQL入門(11月24日)
データベースに接続/切断|SQL入門(11月23日)
SQLiteのインストール|SQL入門(11月22日)
SQL入門:VBAでデータベースを使う|エクセルの神髄(11月22日)


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

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



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

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


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



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