ワークシートのコピーを最速に理解!VBAコードで選ぶコピー結果

VBACopyeyecatch

エクセルVBAで、ワークシートのコピーをを行う時には、行いたい内容に合わせて、

どのコードにするかを選択することが大切です。

そのためには、まずコピー時の結果を知っておくことが必要です。

 

エクセルVBAのコード組み立てで、よく使うメソッドの1つで「Copy」メソッドがあります。

今回はこの「Copy」メソッドの使い方を説明します。

こんにちは、じゅんぱ店長(@junpa33)です。

 

ワークシートのコピーを最速に理解!VBAコードで選ぶコピー結果

 

エクセルでシートを「コピーする」という目的は一つではなく、例えば、

  1. テンプレートがあってそのテンプレートを機能ごと複製して使いたい。
  2. データ保存のためにシートをデータ共々、丸々保存したい。
  3. 保存するのはデータバックアップとして数値保存を行いたい。

というようなことがあったりします。

1と2は「Worksheets.Copy」で行うことが出来ます。

3は「Cells.Copy」で行うか「Range.Value」で行うかになります。

 

それぞれのコピーの方法を見ていきます。

 

「Worksheets.Copy」メソッドでシートのコピーを行う

 

この様なエクセルBOOKを例にとって説明していきます。このBOOKは「.xlsmマクロ有効ブック」で作成されています。

VBACopysample001
テンプレートシートモジュールをこのように記述しておきます。
VBACopysample010

MEMO
この方法は基本的に、コピー元のシートをVBAコードやセルの関数式を丸々コピー先に引き継ぎます。

 

 

Worksheets(“コピー元シート名”).Copy でコピーする

Copyメソッドに引数を何も付けない場合です。

この場合は、新たにエクセルBOOKが作られてそこに「コピー元シート名」のシートがコピー作成されます。

MEMO
このコピー方法では、新たに作成されたエクセルBOOKの保存方法を「.xlsx Excelブック」で保存すれば、VBAコードは引き継がれません。

セルの関数式は引き継がれます。

引数なしコード
Sub シートCopy1()
  Worksheets("テンプレート").Copy
End Sub

VBACopysample002

VBACopysample011

 

Worksheets(“コピー元シート名”).Copy After(Before) でコピーする

Copyメソッドに引数で、「AfterやBefore」を付けてコピーする場合です。

この場合

  • Afterは「コピー元シート名」の右隣にコピーされたシートが作成されます。
  • Beforeは「コピー元シート名」の左隣にコピーされたシートが作成されます。
MEMO
この方法は、コピー元のシートをVBAコードやセルの関数式を丸々コピー先に引き継ぎます。
Afterの場合
引数Afterコード
Sub シートCopy2()
  Worksheets("テンプレート").Copy After:=Worksheets("テンプレート")
End Sub

VBACopysample003

VBACopysample012

Beforeの場合
引数Beforeコード
Sub シートCopy3()
  Worksheets("テンプレート").Copy Before:=Worksheets("テンプレート")
End Sub

VBACopysample004

VBACopysample013

 

Worksheets(“コピー元シート名”).Copy After(Before) で
別BOOKにコピーする

別BOOKにコピーする場合は、事前に別BOOKを作成し開いておく必要があります。

MEMO
このコピー方法は、事前に準備したエクセルBOOKの保存方法が「.xlsx Excelブック」であれば、VBAコードは引き継がれません。

セルの関数式は引き継がれます。

別BOOKコード
Sub シートCopy4()
  Worksheets("テンプレート").Copy After:=Workbooks("Book3.xlsx").Worksheets("Sheet1")
End Sub

VBACopysample005

 

「Cells.Copy」を使って、シートのデータだけをコピーする

 

データだけコピーできているかどうかを分かり易くするために、

I2セルに「=round(A1*1.1,0)」という数式を入力します。A11セルに「11」を入れます。

VBACopysample009

 

 

Worksheets(“テンプレート”).Cells.Copy Destination でコピーする

「Destination」は、どこにコピーするかの「どこに」を示す引数になります。

今回は「Sheet2」にペーストします。

CellsCopy1コード
Sub シートCopy5()
     Worksheets("テンプレート").Cells.Copy Destination:=Worksheets("Sheet2").Range("A1")
End Sub
MEMO
このコピー方法は、シートモジュールにあるイベントコードをコピー先に引き継ぎません。

けれども、セル上に記述された関数式はコピーされます。

VBACopysample006a

 

Worksheets(“テンプレート”).Cells.Copy PasteSpecial でコピーする

「PasteSpecial」は「形式を選択して貼り付け」メソッドです。

「Sheet3」にペーストします。

CellsCopy2コード
Sub シートCopy6()
     Worksheets("テンプレート").Cells.Copy
     Worksheets("Sheet3").Range("A1").PasteSpecial xlPasteValues
End Sub
MEMO
このコピー方法は、テンプレートのコピーには不適な方法です。この例では、シートが間延びしています。

関数式は引き継がれていません。

VBACopysample007a

 

Worksheets(“テンプレート”).Cells.Copy Destination と PasteSpecial
の合わせ技でコピーする

上の2つのコピー方法の合わせ技でテンプレートをコピーしながら、関数式もなしにデータだけをコピーすることが出来ます。

「Sheet4」を準備しておいてください。

CellsCopy3コード
Sub シートCopy7()
     Worksheets("テンプレート").Cells.Copy _
     Destination:=Worksheets("Sheet4").Range("A1")
     Worksheets("Sheet4").Range("A1").PasteSpecial xlPasteValues
End Sub

VBACopysample008

MEMO
この方法によって目的のコピーが達成できます。

 

「Range.Value」で行うシートのコピー

 

このコピー方法は、シートのコピーというよりはセルのコピーになります。

セルの値のみのコピーになります。

MEMO
このコピー方法は、セルのコピーになります。この例では、セルサイズはデフォルトで値のみがコピーされます。

関数式は引き継がれていません

RangeValueコード
Sub シートCopy8()
     Worksheets("Sheet5").Range("A1:AE19").Value = Worksheets("テンプレート").Range("A1:AE19").Value
End Sub

VBACopysample014

 

ワークシートのコピー結果 まとめ

 

シートのコピー方法についても、「どこへコピーするか?」だけでなく「何をコピーするか?」も考えて

コピーコードを選択しなければなりません。

「ここのコピーはいらなかったのに」と、改めてその箇所だけを削除することになるかもしれません。

新たなBOOKにペーストする場合は、関数式を引き連れて来ていれば、全てデータが変わってしまう事もありえます。

 

出来るだけ最初から適切なコピーコードを選択することが吉になります。

 

短期間でエクセルVBAの独学習得を目指したいなら

 

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

 

 

このサイトでよく使うVBAのコードのトピックを纏めています。

「VBA最速理解」の記事一覧を開く

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません