エクセルのシートに大量の図を貼り付けたいんだけど、手作業だと大変すぎる。
こんなお悩みを解決します。
ExcelVBAを使って、保存している複数の図を連続でワークシートに貼り付ける方法です。
大量に貼り付ける作業自体も大変ですが、この例の元となった作業では、なんども図の修正がありました。このような場合は、自動での方法を考えた方が良いです。
目次
シートへの図の配置例
エクセルブックに2つのワークシートがある例です。
シート
- 一覧:配置する図の拡張子なしのファイル名
- 貼付先:図の配置先
ワークシート[一覧]
- ファイル名:A列2行目から
- ファイル保存先:セルD1
一覧の項目が多い場合はテーブル設定し、列挙型変数とクラスを使うと管理しやすいです。
ファイル保存先の画像です。
ワークシート[貼付先]
ワークシート1ページに3行×3列=9枚配置する例です。
グラフの配置順です。
サンプルコード
印刷範囲の設定は省いています。
Sub sample() Const gyo As Integer = 16 Const retu As Integer = 6 Const gkaisu As Integer = 3 Const rkaisu As Integer = 3 Dim wb1 As Workbook, tWS As Worksheet, gWS As Worksheet Set wb1 = ThisWorkbook Set tWS = wb1.Worksheets("一覧") Set gWS = wb1.Worksheets("貼付先") Dim lastR As Long: lastR = tWS.Cells(Rows.Count, 1).End(xlUp).Row Dim fPATH As String: fPATH = tWS.Cells(1, 4) Dim fName As String Dim i As Long, j As Long, r As Integer, c As Integer Dim rNo As Long, cNo As Long Dim shp As Shape gWS.Select With gWS rNo = 1 i = 2 Do While i < lastR + 1 cNo = 1 For c = 1 To rkaisu For r = 1 To gkaisu If i > lastR Then Exit For fName = fPATH & tWS.Cells(i, 1) & ".png" If Dir(fName) <> "" Then Set shp = .Shapes.AddPicture( _ Filename:=fName, _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Cells(rNo + 1, cNo).Left, _ Top:=Cells(rNo + 1, cNo).Top, _ Width:=0, _ Height:=0) With shp .ScaleHeight 0.5, msoTrue .ScaleWidth 0.5, msoTrue End With gWS.Cells(rNo, cNo).Value = tWS.Cells(i, 1) i = i + 1 rNo = rNo + gyo Else gWS.Cells(rNo, cNo).Value = fName & "ファイルなし" i = i + 1 rNo = rNo + gyo End If Next r rNo = rNo - gyo * rkaisu cNo = cNo + retu If i > lastR Then rNo = rNo + gyo Exit For End If Next c rNo = rNo + gyo * gkaisu Loop End With End Sub
印刷範囲を設定する場合は、ループを抜けた後に設定を追加します。
例
lastR = lastR - 1 Dim pGyo As Double: pGyo = WorksheetFunction.RoundUp(lastR / (gkaisu * rkaisu), 0) * (gyo * gkaisu) gWS.PageSetup.PrintArea = "$A$1:$R$" & pGyo
コードの説明です。
簡単な説明
- 2行目:配置の行方向の間隔
- 3行目:配置の列方向の間隔
- 4行目:配置の行方向の繰り返し回数
- 5行目:配置の列方向の繰り返し回数
- 17行目:ワークシート[一覧]を選択した状態で、「gWS.Select」がない場合は配置した図がずれることがあります。
- 28~36行目:図の配置
- 37~38行目:もとの図の50%の大きさに変更します
- 40行目:図の左上にファイル名を設定します