図形(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も不要になりますので、
この書き方も覚えておきましょう。