和風スパゲティのレシピ

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

図形(Shape)をコピーする - Duplicate/Copy

図形(Shape)をコピーする方法を解説します。

同シート内にコピーする場合はDuplicateメソッドを、
別シートへコピーする場合はCopyメソッドを使用します。

図形を別シートへコピーする - Shape.Duplicate

基本構文

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

サンプルコード

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

' 図形を同じシート内に複製
Dim コピー図形 As Shape
Set コピー図形 = 元図形.Duplicate

' 位置を移動
コピー図形.Top = 100
コピー図形.Left = 10

解説

図形(Shape)を同じシート内にコピーするには、
Duplicateメソッドを使用します。


Duplicateメソッドは対象の図形をその場に複製し、
複製した図形を戻り値として取得できます。

サンプルコードの通りSetと同時に実行ができますので、
そのままShape型変数に入れて操作してください。


Duplicateメソッドには引数はなく、
図形にやや重なる形ですこし右下に複製されます。

移動する場合はSetした変数を使ってTop・Leftプロパティを設定して下さい。


サッと書きたい場合はWithステートメントでも書けますのでご活用ください。

With 元図形.Duplicate
    .Top = 100
    .Left = 10
End With

 

図形を別シート・別ブックへコピーする - Shape.Copy

基本構文

元図形.Copy
コピー先シート.Paste

Set コピー図形 = コピー先シート.Shapes(コピー先シート.Shapes.Count)

サンプルコード

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

Dim wsコピー先 As Worksheet
Set wsコピー先 = Worksheets("Sheet2")

' 図形をコピー
元図形.Copy
wsコピー先.Paste

' 生成されたShapeオブジェクトを変数に取得
Dim コピー図形 As Shape
Set コピー図形 = wsコピー先.Shapes(wsコピー先.Shapes.Count)

' 位置を移動
コピー図形.Top = 100
コピー図形.Left = 10

解説

図形(Shape)を別シートへコピーするには、
ShapeオブジェクトのCopyメソッドを使用します。

Copyメソッドを実行すると図形がクリップボードにコピーされるため、
その後にコピー先シートでPasteメソッドを実行します。


Copyメソッド・Pasteメソッドには戻り値がありませんので、
そのまま変数にSetすることはできません。

位置を移動するなどが必要な場合は、
最後に追加された図形(=図形の数番目の図形)を取得する必要があります。

Set コピー図形 = コピー先シート.Shapes(コピー先シート.Shapes.Count)

 
これがDuplicateメソッドとの違いになっており、
Copyメソッドの方がかなり面倒なコードが必要になります。

もちろん同シート内のコピーもCopyメソッドで行うことは可能ですが、

  • 同じシート内にコピーしたい場合はDuplicateメソッド
  • 別シートへコピーしたい場合はCopyメソッド

という使い分けで覚えておくとよいでしょう。


なお、Pasteメソッドには引数Destinationがあり、
貼り付け先のセルを指定できます。

' 図形をコピー
元図形.Copy
wsコピー先.Paste wsコピー先.Range("C3")

 
このように指定すると、
指定したセルの位置に図形を貼り付けることができます。

これで完了でよい場合は変数へのSetも不要になりますので、
この書き方も覚えておきましょう。