ワークシートを複製したいときのVBA作成例をご紹介します。
今回は2パターンの方法をご紹介しますが、マクロに慣れるためにも両方とも使えるように頑張っていきましょう。
こちらの作成例を転用するだけでは、あまり「時短」にはつながらないかもしれませんが、基本操作を積み重ねて少しずつ業務でもつかえそうなレベルに近づいていきましょう。
こちらでご紹介するおもな内容です。
- ワークシートをコピーする方法
- セルの範囲をコピーする方法
- ワークシートの追加方法
- 値を貼付する方法
ワークシートをコピーする方法
もっともシンプルな方法としては、「Copy」メソッドをつかってワークシートを複製する方法があります。
オブジェクト.Copy([Before],[After])
シートの追加場所を指定したいときは引数をつかいます。
BeforeとAfterを同時に指定することはできません。
メソッド名 | 引数 | 内容 |
Copy | After | 指定したワークシートのうしろにコピーされる |
Copy | Before | 指定したワークシートのまえにコピーされる |
Copy | なし | 新規のエクセルでワークシートが作成される |
こちらのコードを確認しておきましょう。
Sub test() Worksheets("sheet1").Copy after:=Worksheets("sheet1") End Sub
実行結果はこちらです。
ワークシートがコピーされていることがわかります。

ひとつずつ作り上げる方法|シート作成&セル範囲のコピペ
さきほどの方法でワークシートを複製するほかに、ひとつずつマクロを作り上げる方法があります。
こちらの内容を覚えていただいた方がのちほど応用がききますので、あわせて確認をしてみてください。
値のコピー
コピーする値の範囲を指定したい
こちらの例をつかってご説明します。

ここでは2つの値の範囲を選択する方法をご紹介します。
セルの範囲を指定する方法
この方法は、セル範囲を具体的に指定します。
さっそくコードを確認してみましょう。
「Range」をつかってセル名を指定しています。
Sub sample1() Range("A1:C6").Select End Sub
こちらもおなじ動作ですが「Cells」をつかった方法もあります。
「Cells」をつかった方法では行番号と列番号でセルを指定しています。
”Cells(1,1)は「セルA1」”を表して、おなじように”Cells(6,3)は「セルC6」”を表しています。
Sub test2() Range(Cells(1, 1), Cells(6, 3)).Select End Sub

Cells(行番号、列番号)で指定します。
行と列が逆になりがちですので、「行、列!」と頭の中で言いながら数値を入力してください。きっとすぐに覚えられます。
セルの範囲を自動判定する方法
指定したセルの領域を自動的に判定する方法もあります。
少しイメージがしにくいと思いますので、コードを書く前に画面をみておきましょう。
「セルA1」を選択した状態で、キーボードの「ctrl」と「A」を同時押ししてみてください。
「セル1」をふくむ領域が選択されましたかと思います。
これをコードをつかって表現するとつぎの通りになります。
Sub test3() Range("A1").CurrentRegion.Select End Sub
こちらの方法では「CurrentRegion」をつかっています。
指定したセルを含めて、空白行と空白列で囲まれた範囲を自動的に判定してくれます。
もし取得したいセル範囲が一定で、マクロのテストでも問題なく動作が確認できるようでしたらこちらを採用いただいてもいいかと思います。

自動判定のためときに意図しない範囲を取得することもあるかと思いますので、マクロの動作はあらかじめテストしておきましょう。
シートの新規作成
新しいワークシートを追加したい
新しいワークシートを追加する方法をご紹介します。
同時に新しいワークシートの名前を変更します。
Sub test4() Worksheets.Add ActiveSheet.Name = "コピー" End Sub
実行結果がこちらです。

新しいシートへの値の貼付
新しいシートへの貼付方法
新しいシートに値を貼付したい
あらかじめコピーしておいた内容を新しいシートに貼付します。
さっそくコードを確認しましょう。
Sub test5() Worksheets("コピー").Select Range("A1").Select ActiveSheet.Paste End Sub
「Paste」をつかって次の手順で値を貼付しています。
- ワークシートの選択
- セルの選択
- 値の貼付
コードに慣れてきたら、わざわざ3行のコードにわけて記述しなくても1行のコードで記述したくなる気持ちがでてくるかと思います。
たとえば、このようなコードです。
Sub test6() Worksheets("コピー").Range("A1").Paste End Sub
実行結果はこちらです。
なぜかエラーがでてしまいました。

「Paste」メソッドの使い方
メソッド「Paste」について構文をつかってもう少しご説明します。
Worksheetオブジェクト.Paste([Destination],[Link])
「Paste」はWorksheetオブジェクトに対してのみ使用可能というところが、さきほどご紹介した例のエラーの理由です。
「Paste」の引数はこちらです。
こちらの引数は2つ同時に指定することができません。
メソッド | 引数 | 内容 |
Paste | Destination | 省略可。 貼付先のセルを指定する。もしくは範囲指定する。 |
Link | 省略可。 「True」もしくは「False」を入力する。 「True」の場合は貼付データを元データにリンクして、「False」の場合はリンクしない。 |
さいごに合わせて実行
それでは最後に今回ご紹介したコードをあらためて確認しましょう。
Sub sample1() '値のコピー Worksheets("リスト").Select Range("A1").CurrentRegion.Select Selection.Copy 'シートの新規作成 Worksheets.Add ActiveSheet.Name = "コピー" '新しいシートへの値の貼付 Worksheets("コピー").Select Range("A1").Select ActiveSheet.Paste End Sub
マクロの実行の前後比較がこちら。

まとめ
今回は基本的なマクロを組み合わせてワークシートの内容を複製しました。
普段は手作業で行っていることでも、マクロをつかえば何度でも正確に再現することができます。
今回ご紹介した一連のマクロ作成の流れを自分なりに改造してみて、いろいろと試しながら理解を深めてみてください。