こんにちは、Ryoです。
Excelで色んな資料を作っていると欠かせないのが図形達ですね。
テキストボックスや矢印、吹出とか四角形等々ありますが場合によっては
その図形達を同じ位置で別のシートにコピーしたいことが稀に良くあります。(どっちだ?)
単一のファイルなら全部選択して他シートに貼れば終わりですが、複数となると結構な
手間になりますから、やっぱり楽に済ませたいものです。
そこで今回は同じ位置で別シートにコピーするVBAコードをご紹介します。
1.サンプルSheet
Sheet1にこのように4つの図形があったとします。
それらを全てをSheet2枠内の同じ位置にコピーするサンプルコードになります。

【コピー元Sheet1】

【コピー先Sheet2】
次はサンプルコード全体になります。
2.サンプルコード
Sub ShapsMove()
Dim strName() As Variant
Dim Sh_A, Sh_B As Worksheet
Dim Sh_Aname, Sh_Bname, bk As String
Dim i As Integer
'ブック名、元Sheet名をSh_A(ワークシートオブジェクト)にセット
bk = ActiveWorkbook.Name
Sh_Aname = ActiveSheet.Name
Set Sh_A = Workbooks(bk).Worksheets(Sh_Aname)
'この場合末尾シートの為、最終シートを選択
Worksheets(Worksheets.Count).Select
'コピー先シート情報をSh_Bにセット
Sh_Bname = ActiveSheet.Name
Set Sh_B = Workbooks(bk).Worksheets(Sh_Bname)
Sh_A.Activate
'コピー元シートの図形をカウントし動的配列にセット
ReDim strName(1 To ActiveSheet.Shapes.Count)
Dim Top_y, Left_x, Height_y, Width_x As Double
For i = 1 To ActiveSheet.Shapes.Count
strName(i) = ActiveSheet.Shapes(i).Name
'//ここから
Top_y = ActiveSheet.Shapes(strName(i)).Top
Left_x = ActiveSheet.Shapes(strName(i)).Left
Height_y = ActiveSheet.Shapes(strName(i)).Height
Width_x = ActiveSheet.Shapes(strName(i)).Width
'//ここまでの記述で図形座標を読み込む
'例として図形名の変更(ここはお好きに)
Sh_A.Shapes(strName(i)).Name = "Fig" & i
Sh_A.Shapes("Fig" & i).Copy
Sh_B.Paste
'コピー先図形へ同座標を指定して移動
'各変数に+又は-させれば位置の調整も出来ます
'例).Left=Left_x + 30 等を指定
With Sh_B.Shapes("Fig" & i)
.Left = Left_x
.Top = Top_y
.Height = Height_y
.Width = Width_x
End With
Next i
End Sub
今回はサンプルとして、コピー元Sheet内にある図形全てに対し座標を取得して、
コピー先のSheet2に貼付けを行い、取得した座標位置へ移動させるものです。
特定の図形を指定したい場合は、
For i = 1 To ActiveSheet.Shapes.Count
strName(i) = ActiveSheet.Shapes(i).Name
この下にIfやSelect Case等で条件を指定すれば、指定した図形のみを処理できます。
もしテキストボックスであれば、
If InStr(strName(b), “Text”) <> 0 Then等ですね。
ワークシートをSh_A、Sh_Bにセットしてるのは、記述が面倒なのでそうしてますが
ここはお好みで良いと思います。
これを実行するとSheet2(コピー先)へこの通り同じ位置にコピーされます。

Sheet2実行後
この記述を応用すれば特定の図形やコピー先での位置調整も出来ますので、何かと
使えるケースが多いんじゃないかなと思います。
以上、VBAを使って図形を別シートの同じ位置にコピーするサンプルコードのご紹介でした!
何かのお役に立てれば幸いです。
Ryo

