メインコンテンツへスキップ
【VBA】図形を別シートにコピーする

【VBA】図形を別シートにコピーする

··1 分
Programming VBA
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。
目次

VBAでシートに存在する図形を別シートの同じ位置にコピーしてみます。
Sheet1に3つの図形があるので、Sheet2の同じ位置に図形をコピーしてみます。

図形を別シートにコピーするVBAコード
#

下記のコードはSheet1に存在する図形をSheet2の同じ位置にコピーするVBAコードです。

Option Explicit

Public Sub Main()

  'コピー前にコピー先Sheet2に既に存在する図形をすべて削除したいときは下記のコメントを外す
  'Call DeleteAllShapes("Sheet2")
  Call CopyShapes("Sheet1", "Sheet2")

End Sub

Public Sub CopyShapes(src_sht_name As String, dst_sht_name As String)
  'コピー元シートの図形をすべてコピーし、コピー先に貼り付ける
  
  Dim srcSht As Worksheet
  Dim dstSht As Worksheet
  Set srcSht = ThisWorkbook.Worksheets(src_sht_name)
  Set dstSht = ThisWorkbook.Worksheets(dst_sht_name)

  Dim shp As Shape
  Dim topY As Double
  Dim leftX As Double
  Dim shapeHeight As Double
  Dim shapeWidth As Double
  
  Dim i As Long
  For i = 1 To srcSht.Shapes.Count
    topY = srcSht.Shapes(i).Top
    leftX = srcSht.Shapes(i).Left
    shapeHeight = srcSht.Shapes(i).Height
    shapeWidth = srcSht.Shapes(i).Width
    
    srcSht.Shapes(i).Copy
    dstSht.Paste
    
    With dstSht.Shapes(dstSht.Shapes.Count)
      .Top = topY
      .Left = leftX
      .Height = shapeHeight
      .Width = shapeWidth
    End With
  Next i

  Set srcSht = Nothing
  Set dstSht = Nothing
  Set shp = Nothing

End Sub

Public Sub DeleteAllShapes(sht_name As String)
  'シートの図形をすべて削除

  Dim sht As Worksheet
  Set sht = ThisWorkbook.Worksheets(sht_name)
  
  Dim shp As Shape
  For Each shp In sht.Shapes
    shp.Delete
  Next shp

End Sub

Mainを実行すると、Sheet1の図形がSheet2にコピーされます。
コピーされた図形はSheet1と同じ位置に配置されます。

関連記事

【VBA】zip内のファイル一覧を展開せずに取得する
·2 分
Programming VBA
【VBA】画像の幅と高さを取得する
··2 分
Programming VBA
【VBA】文字列が指定された文字列で始まる、または終わるか確認する(StartsWith,EndsWith)
··2 分
Programming VBA