回答編集履歴

3

コード修正

2022/07/27 07:15

投稿

hatena19
hatena19

スコア33757

test CHANGED
@@ -89,6 +89,6 @@
89
89
  Left:=targertCell.Left, _
90
90
  Top:=targertCell.Top, _
91
91
  Width:=-1, _
92
- Height:=430
92
+ Height:=-1
93
93
  End Sub
94
94
  ```

2

コード修正

2022/07/27 07:12

投稿

hatena19
hatena19

スコア33757

test CHANGED
@@ -88,6 +88,7 @@
88
88
  SaveWithDocument:=True, _
89
89
  Left:=targertCell.Left, _
90
90
  Top:=targertCell.Top, _
91
+ Width:=-1, _
91
92
  Height:=430
92
93
  End Sub
93
94
  ```

1

コード追記

2022/07/27 06:19

投稿

hatena19
hatena19

スコア33757

test CHANGED
@@ -40,3 +40,54 @@
40
40
  [VBA シートを追加する](https://www.tipsfound.com/vba/10003)
41
41
 
42
42
  [エクセルVBAで大量の画像をまとめてシートに貼り付けるAddPictureメソッドの使い方](https://tonari-it.com/excel-vba-shapes-addpicture-batch/)
43
+
44
+ ---
45
+ 上記のコードに、下記の処理を追加する参考コードです。
46
+
47
+ - サブフォルダー名で新規シートの追加、追加先は末尾
48
+ - 追加したシートにサブフォルダー内のpng画像を挿入
49
+
50
+ ```vba
51
+ Sub PicInsert()
52
+ '変数はVariant型ではなく適切な型で宣言した方がよい
53
+ Dim f As Object
54
+ Dim Path As String
55
+ Dim FileName As String
56
+ Dim newWorkSheet As Worksheet
57
+ Dim targertCell As Range
58
+
59
+ Path = Range("A1").Value 'セルにあらかじめTestまでのディレクトリを入れておく
60
+
61
+ With CreateObject("Scripting.FileSystemObject")
62
+ 'サブフォルダーを順に取得
63
+ For Each f In .GetFolder(Path).SubFolders 'サブフォルダーオブジェクトを順に取得
64
+
65
+ '新規シートを末尾に追加して名前をフォルダー名に
66
+ Set newWorkSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
67
+ newWorkSheet.Name = f.Name
68
+ Set targertCell = newWorkSheet.Range("A1") '画像挿入セル
69
+
70
+ FileName = Dir(f.Path & "\*.png") 'サブフォルダー内のpngファイル名を取得
71
+ Do Until FileName = "" '次のファイル名がなくなるまで繰り返す
72
+
73
+ AddPicture f.Path & "\" & FileName, targertCell
74
+ Set targertCell = targertCell.Offset(25, 0) '画像挿入セルを25行下へ移動
75
+
76
+ FileName = Dir() '次のファイル名を取得
77
+ Loop
78
+ Next f
79
+ End With
80
+
81
+ End Sub
82
+
83
+ '画像挿入サブルーチン
84
+ Sub AddPicture(ImgFileName As String, targertCell As Range)
85
+ targertCell.Parent.Shapes.AddPicture _
86
+ FileName:=ImgFileName, _
87
+ LinkToFile:=False, _
88
+ SaveWithDocument:=True, _
89
+ Left:=targertCell.Left, _
90
+ Top:=targertCell.Top, _
91
+ Height:=430
92
+ End Sub
93
+ ```