【VBA入門】シートのコピーと移動(複数コピーや名前の変更も解説)

Excelシートを使っていると、すでに使っているシートをコピーして作業を加えたいことってありますよね。

別々のシートをコピーして、1つのブックにまとめるなんてこともありませんか?たくさんのシートを1つずつコピーして、1つのブックにまとめるのも結構面倒ですよね。

そんなときこそ、VBAを使って自動化しましょう!この記事ではシートのコピーについて

  • シート全体をコピーする方法
  • コピー後にシートの名前を変更
  • 複数のシートを一度にコピーする方法
  • シートを別のブックにコピーする方法
  • といった基本的な内容から、

  • シートの先頭にコピーする方法
  • シートの末尾にコピーする方法
  • セルの値のみをコピーする方法
  • シートを移動する方法
  • といった応用的な内容まで解説します。

    この記事を読み終えるころには、VBAで効率的なシート操作ができるようになっていますよ!

    シート全体をコピーする方法

    シートそのものをコピーする方法を解説します。

    シートをコピーするには、Copyメソッドを使います。

    [書式] 引数Beforeで指定をすると、指定したシート名の前にシートがコピーされます。

    引数Afterで指定すると、指定したシートの次にシートがコピーされます。引数BeforeとAfterは一緒に指定することはできません。

    サンプルコードで確認しましょう。

    [使用例] [実行結果]

    SheetCopy01

    「Before := Worksheets(“フォーム”)」として、「フォーム」というシートの前にコピーしたものを置いています。

    コピー後にシートの名前を変更

    ここでコピー後にシートの名前を変更する方法についてお伝えします。

    シートをコピーするとシート名が”Sheet (2)”のように自動で付けられます。これを変更した方が扱いやすい場合が多いです。シート名を変更するにはWorksheetオブジェクトのNameプロパティの値を変更します。

    サンプルコードで確認しましょう。

    [使用例] [実行結果]

    SheetCopy02

    シートをコピーすると、新しくコピーされたシートがActiveSheetになりますので、ActiveSheet.Nameプロパティを変更しています。

    シートの先頭にコピーする方法

    先頭にシートをコピーしたい場合があります。

    コピー位置の基準となるシート名を先頭シートにし、Beforeを使うことで先頭にシートをコピーすることができます。

    サンプルコードで確認しましょう。

    [使用例] [実行結果]

    先頭に追加

    シートの末尾にコピーする方法

    新しいシートをコピーして追加する場合は、末尾に追加するケースも多いですよね。コピー位置の基準となるシート名を末尾のシートにし、Afterを使うことで末尾にシートをコピーすることができます。

    サンプルコードで確認しましょう。

    [使用例] [実行結果]

    末尾に追加

    Worksheets.Countにてシート数を取得して末尾を指定しています。

    複数のシートを一度にコピーする方法

    複数のシートをまとめて一度にコピーしたい場合があります。そんな場合はArray関数を使って以下のように記述します。

    [書式] サンプルコードで確認しましょう。

    [使用例] [実行結果]

    SheetCopy03

    シートを別のブックにコピーする方法

    今度は、シートを別のブックにコピーする方法を解説します。

    書式は以下の通りで「コピー元シート.Copy コピー先ブック」が基本です。

    [書式] コピー先のシートの前にブック名を指定します。なお、あらかじめブックは開いておく必要があります。

    サンプルコードで確認しましょう。

    例えば、各個人が作ったシートを1つのブックにする、という業務を考えてみましょう。表紙というシートだけがある「提出用」というブックに、各個人が自分のシートをコピーする、といった感じでしょうか。

    提出用ブックのイメージです。

    [実行前]

    SheetCopy04

    そして、各個人のブックです。各個人名のブックは1シートのみで、ファイルも同じフォルダに存在しているという前提です。

    SheetCopy05

    各個人のブックで、以下のVBAを実行します。

    [使用例] [実行結果]

    SheetCopy06

    これを各個人のブックで実行すれば、どんどん後ろにシートが追加されます。

    ただし、実行した人の順番になるので注意してください。

    セルの値のみをコピーする方法

    シート間で、セルの値のみをコピーしましょう。セルの書式や数式を無視して値のみをコピーする時は、RangeオブジェクトのValueプロパティを使います。

    最初からコピー元とコピー先が存在している想定です。

    SheetCopy07

    A1からE6を取得したいのですが、ここでは範囲を固定せず、動的に終わりのセルをとらえます。

    A1にカーソルがある状態で、「Ctrl + Shift + End」キーを押すと、以下のようになります。

    SheetCopy08

    この範囲を「使用中のセル範囲」といいます。

    「Ctrl + Shift + End」キーをVBAで実装し、かつとなりのシート「吉田」へコピーしてみましょう。

    [使用例] [実行結果]

    SheetCopy09

    シート「吉田」へコピーできました。

    Sheets(“フォーム”).Activateとしてアクティブ化したので、RangeやCellsの頭に何も付いていないところはフォームを指定したのと同じになります。

    なおSpecialCellsプロパティを使って、使用中のセル範囲の終わりを取得するやり方は、以下を参考にどうぞ。

    VBAで最終行を取得するには?|End(xlUp)、SpecialCells(xlLastCell)
    更新日 : 2019年4月24日

    シートを移動する方法

    シートをコピーした後は、シートの順番がバラバラになって見づらい場合がよくあります。例えば、以下のようになってしまったら、見づらいですよね。

    SheetCopy10

    これもVBAを使って自動化しましょう!

    シートを移動するには、Moveメソッドを使います。Moveメソッドの使い方はCopyメソッドと同じです。

    シートの移動を、上記の例を使ってやってみましょう。

    [使用例] [実行結果]

    SheetCopy11

    移動ができました。

    Worksheets.Countにてシート数を取得して末尾を指定しています。

    まとめ

    この記事では、シートのコピーや移動について解説しました。

    ぜひマスターして、効率的なシートの操作ができるようになってくださいね!

    Excel VBAを最短で習得したい方へ

    元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

    ただし、実際の学習期間中はつまづいている時間がほとんどです。

    「なかなかやり遂げられ無い、挫折してしまった」
    「時間が足りない」
    「情報が少なくどう調べればいいかわからない」
    「エラーを解決することができない」

    このような悩みを抱えている方も少なく無いと思います。

    • もう挫折したくない
    • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
    • 自分だけのカリキュラムで効率的に勉強したい
    そんな方はお気軽に侍エンジニア塾までご相談ください。

    お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

    まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

    Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

    詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

    cta2_vba2

    LINEで送る
    Pocket

    書いた人

    本多 農

    本多 農

    関西在住のITエンジニアです。普通の会社に勤務しながら、侍エンジニアのインストラクター、ライターとして活動しています。

    おすすめコンテンツ

    あなたにぴったりなプログラミング学習プランを無料で診断!

    プログラミング学習の効率を劇的に上げる学習メソッドを解説