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回.手作業で出来なければマクロは書けない

・エクセルの機能を知る ・ワークシート関数を知る ・「手作業で出来なければマクロは書けない」のまとめ ・ExcelマクロVBA入門の対応ページ
第16回.エクセルの機能を上手に使う
・エクセルの機能を使った例 ・普通にマクロVBAを書くと ・C2セルに計算式を入れ、フィルハンドルをダブルクリックでオートフィル ・C2セルに計算式を入れ、C2セルをコピー、C3~C11を選択し貼り付け ・C2~C11を選択し、計算式を入力しCtrl+Enterで一括入力 ・マクロの記録を参考にVBAを書いてみると、 ・どのエクセル機能を使うかを考える ・並べ替え ・オートフィルター ・エクセルの機能を上手に使う ・ExcelマクロVBA入門の対応ページ
第17回.セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)
・ブックの書き方 ・シートの書き方 ・セルにブック・シートを指定する方法 ・直接指定 ・Withを使う ・Setを使う ・SetとWithを組み合わせて使う ・ExcelマクロVBA入門の対応ページ
第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)
第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)
・ブック(Excelファイル)のパス(場所)を特定する ・ブックを開く ・ブックを閉じる ・上書き保存 ・名前を付けて保存 ・保存形式(ファイルの種類)について ・ExcelマクロVBA入門の対応ページ
第20回.全てのシートに同じ事をする(For~Worksheets.Count)
・シートの指定方法 ・全シートの「印刷の向き」を「横」に設定します。 ・シート名に"横"と入っているシートだけ「印刷の向き」を「横」に設定します ・シート名に"削除"と入っていたらシートを削除する ・For Eachについて ・ExcelマクロVBA入門の対応ページ
第21回.ファイル一覧を取得する(Do~LoopとDir関数)
・Dir関数 ・Dir関数の使い方 ・ファイルの一覧を取得するマクロVBAコード ・Do~Loopステートメント ・ExcelマクロVBA入門等の対応ページ
第22回.複数ブックよりデータを集める
・第17回.セルにブック・シートを指定する ・第19回.ブックを開く・閉じる・保存する ・第21回.ファイル一覧を取得する ・複数ブックよりデータを集めるVBA
第23回.複数のプロシージャーを連続で動かす(Callステートメント)
・長い1つのプロシージャーを分割する ・プロシージャーを呼び出すCallステートメント ・ExcelマクロVBA入門等の対応ページ
第24回.マクロの呪文を追加してボタンに登録(ScreenUpdating)
・マクロの呪文「Application.ScreenUpdating」を追加 ・ボタンの追加とマクロの登録 ・ExcelマクロVBA入門等の対応ページ
第25回.月別ブックより部署別シートに担当別に集計するNo1
マクロ再入門と題しての連載もいよいよ大詰めです、これまでの総復習として、以下のような処理のマクロを書いてみましょう。■処理概要 月別のデータファイル(ExcelファイルまたはCSV)を読込み、※項目は、日付,部署,担当者,売上数,売上金額 これを、新規ブックを作り、部署別のシートに、担当者・年月ごとの集計値を出力す…


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

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


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

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




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


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


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