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

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

第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 参考画面

このメッセージが表示されます。
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 オブジェクト.メソッド
このように書くことで、作成されたオブジェクトを簡単に特定できるようになります。

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

第65回.シートの挿入、名前の変更(Add,Name)
VBAでシートを挿入(新規追加)したり、名前を変更する場合の解説です。シートを挿入すれば、大抵の場合はシート名も変更することになりますので、シート挿入→シート名変更、この一連のVBAをセットで覚えておきましょう。シートの挿入 VBAでシートを総に優するには、Sheets.Addメソッド、Worksheets.Addメソッドを使います。

第66回.シートのコピー・移動・削除Copy,Move,Delete)
シートをコピーや移動をしたり、また削除する場合の説明です、VBAでは、雛形シートをコピーして使ったり、不要なシートを削除することは頻繁にあります。シートのコピー・移動には、Worksheet.Copyメソッド、Worksheet.Moveメソッド これら、WorkSheetオブジェクトのメソッドを使用します。



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

ユーザーに絶対に停止させたくない場合のVBA設定|VBA技術解説(4月1日)
CharactersプロパティとCharactersオブジェクト|VBA技術解説(3月31日)
指数近似/対数近似/累乗近似(掲載順位とCTR)|エクセル関数超技(3月31日)
練習問題32(連続数値部分を取り出し記号で連結)|VBA練習問題(3月24日)
連続数値部分を取り出し記号で連結|エクセル関数超技(3月24日)
数式バーの高さを数式の行数で自動設定|VBAサンプル集(3月21日)
LET関数(数式で変数を使う)|エクセル入門(3月21日)
スピルに対応したXSPLITユーザー定義関数(文字区切り)|VBAサンプル集(3月15日)
XMATCH関数(範囲から値を検索し一致する相対位置)|エクセル入門(3月14日)
XLOOKUP関数(範囲を検索し一致する対応項目を返す)|エクセル入門(3月14日)


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

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




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


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



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