ExcelマクロVBA再入門 | 第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete) | マクロが覚えられないという初心者向けに理屈抜きのやさしい解説



最終更新日:2016-03-29

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


マクロVBAで同形式のシートを大量に作るときは、

事前に雛形としてのシートを作成しておき、それをコピーして複数シートを作成します、

また、新規シートを挿入したり、不要になったシートを削除したりと、

シートを操作することが結構多くあります。



■シートのコピー

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


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



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

新しいブックにコピー


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

Worksheets("Sheet1").Copy

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

同一ブック内にコピー


末尾へコピーする場合のマクロVBAコードは、

Worksheets("Sheet1").Copy after:=Worksheets(Worksheets.Count)

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

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

先頭にコピーする場合のマクロVBAコードは、

Worksheets("Sheet1").Copy abefore:=Worksheets(1)

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

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

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



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


■シートの挿入

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

Worksheets.Add

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

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



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

Worksheets.Add

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



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

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



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


■シートの削除

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

Worksheets("Sheet1").Delete

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



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

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

Application.DisplayAlerts = False

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



■メソッドの戻り値

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





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

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





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

第17回.セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)
第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)
第20回.全てのシートに同じ事をする(For〜Worksheets.Count)
第21回.ファイル一覧を取得する(Do〜LoopとDir関数)
第22回.複数ブックよりデータを集める
第23回.複数のプロシージャーを連続で動かす(Callステートメント)
第24回.マクロの呪文を追加してボタンに登録(ScreenUpdating)

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

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.定数と型宣言文字(Const)|ExcelマクロVBA入門
10.CSVの読み込み方法|ExcelマクロVBAサンプル集



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

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


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

    ↑ PAGE TOP