和風スパゲティのレシピ

日本語でコーディングするExcelVBA

Shape.CopyとShape.Duplicateの違い

図形(Shape)をコピーする際に使用する、
CopyメソッドとDuplicateメソッドの違いを解説します。

同じところ

どちらも図形(Shape)を複製する際に使用します。

以下のコードはどちらも同じ動きになります。

Dim 元図形 As Shape
Set 元図形 = Worksheets("Sheet1").Shapes("TextBox 1")

' 図形を同じシート内に複製(Duplicate)
Dim コピー図形 As Shape
Set コピー図形 = 元図形.Duplicate
コピー図形.Top = 100
コピー図形.Left = 10

' 図形を同じシート内に複製(Copy)
元図形.Copy
Worksheets("Sheet1").Paste
Dim コピー図形 As Shape
Set コピー図形 = Worksheets("Sheet1").Shapes(Worksheets("Sheet1").Shapes.Count)
コピー図形.Top = 100
コピー図形.Left = 10

違うところ

Duplicateメソッドは同じシートへの複製しかできない代わりに、
コードが簡単に書けるというメリットがあります。


Duplicateは引数がひとつもなく、
単に今いる場所の右下に図形を複製します。

その際、戻り値としてShape型を受け取ることが出来るため、

Set コピー図形 = 元図形.Duplicate

このコード単行で複製と変数Setを完了することが出来ます。


対してCopyメソッドは行先を指定する引数を持っていないため、
必ずPasteメソッドを実行する必要があります。

戻り値も持っていないためそのまま変数にSetすることはできず、

Set コピー図形 = Worksheets("Sheet1").Shapes(Worksheets("Sheet1").Shapes.Count)

このように「シートの図形数番目の図形」を取得する必要があります。


しかしながらPasteメソッドは別ブック・別シートに対しても実行できるため、
これがCopyメソッドの長所ということになります。

使い分け

違うところで解説した通り、

  • 同シート内での複製ならDuplicateメソッド
  • 別シート・別ブックへの複製ならCopyメソッド

を使用しておけばOKです。