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

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

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

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

  • シート全体をコピーする方法
  • コピー後にシートの名前を変更
  • 複数のシートを一度にコピーする方法
  • シートを別のブックにコピーする方法

といった基本的な内容から、

  • シートの先頭にコピーする方法
  • シートの末尾にコピーする方法
  • セルの値のみをコピーする方法
  • シートを移動する方法

といった応用的な内容まで解説します。この記事を読み終えるころには、VBAで効率的なシート操作ができるようになっていますよ!

なお、VBAを学びIT企業への転職や作業の効率化を実現したい人は「侍エンジニア」をお試しください。

侍エンジニアでは現役エンジニアと学習コーチの2名体制で学習をサポート。AIプログラミングやPython・VBAの習得を通じて、手間のかかる作業を効率化する方法を学べます。

受講料が最大80%OFFになる「給付金コース」も提供中。未経験から挫折なくAIスキルを習得したい人は、ぜひ一度お試しください。

\ オンラインで相談可能 /

目次

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

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

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

[書式]

Worksheets("シート名またはインデックス").Copy Before(またはAfter):=”基準となるシート名”

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

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

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

[使用例]

Sub SheetCopy1()
 
    Worksheets("フォーム").Copy Before:=Worksheets("フォーム")
 
End Sub

[実行結果]

SheetCopy01

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

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

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

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

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

[使用例]

Sub SheetCopy1()
 
    Worksheets("フォーム").Copy Before:=Worksheets("フォーム")
    ActiveSheet.Name = "田中"

End Sub

[実行結果]

SheetCopy02

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

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

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

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

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

[使用例]

Sub SheetCopy2()
 
    Worksheets("フォーム").Copy Before:=Worksheets(1)
 
End Sub

[実行結果]

先頭に追加

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

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

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

[使用例]

Sub SheetCopy3()
 
    Worksheets("田中").Copy After:=Worksheets(Worksheets.Count)
 
End Sub

[実行結果]

末尾に追加

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

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

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

[書式]

Worksheets(Array(“シート名1”, “シート名2”, ・・・)).Copy Before(またはAfter):=”基準となるシート名”

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

[使用例]

Sub SheetCopy4()
 
    Worksheets(Array("佐藤", "田中")).Copy Before:=Worksheets("フォーム")

End Sub

[実行結果]

SheetCopy03

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

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

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

[書式]

Worksheets(インデックス).Copy After(またはBefore):=Workbooks("ブック名").Worksheets("シート名")

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

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

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

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

[実行前]

SheetCopy04

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

SheetCopy05

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

[使用例]

Sub SheetCopy5()
 
    Worksheets(1).Copy After:=Workbooks("提出用").Worksheets("表紙")

End Sub

[実行結果]

SheetCopy06

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

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

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

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

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

SheetCopy07

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

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

SheetCopy08

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

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

[使用例]

Sub SheetCopy6()
 
    Dim MaxRow As Long '最終セルの行番号
    Dim MaxColumn As Integer '最終セルの列番号
 
    '一番左上から、使用中のセル範囲を取得
    MaxRow = Range("A1").SpecialCells(xlLastCell).Row
    MaxColumn = Range("A1").SpecialCells(xlLastCell).Column
 
    'フォームをアクティブ化する
    Sheets("フォーム").Activate
 
    With Sheets("吉田")
        .Range("A1", .Cells(MaxRow, MaxColumn)).Value = _
            Range("A1", Cells(MaxRow, MaxColumn)).Value
    End With
 
End Sub

[実行結果]

SheetCopy09

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

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

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

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

シートを移動する方法

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

SheetCopy10

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

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

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

[使用例]

Sub SheetMove()
 
    Worksheets("フォーム").Move after:=Worksheets(Worksheets.Count)
    Worksheets("メンバー").Move after:=Worksheets(Worksheets.Count)
 
End Sub

[実行結果]

SheetCopy11

移動ができました。

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

まとめ

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

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

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次