'Microsoft Scripting Runtimeにチェック→FSOを使用する為
Sub 画像貼り付け()
Dim lngTop As Long 'TOPの余白用
Dim fs As FileSystemObject
Dim objFile As Scripting.File
Dim objFldr As Scripting.Folder
Dim c As Long '写真貼り付けのカウント用
Dim cFiles As Long 'ファイルの数
Dim cLast As Long '最後の3の倍数用
Dim ws As Worksheet '作業用ワークシート
Set fs = New Scripting.FileSystemObject
Set objFldr = fs.GetFolder(ThisWorkbook.Path & "\写真")
'最初は、写真を貼るシートをコピーする
Worksheets("ひな形").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "yymmdd")
Set ws = ActiveSheet
c = 1 '写真を貼り付けるカウント用
lngTop = 20 '写真貼の際、Topの余白を20の意味
cFiles = objFldr.Files.Count 'フォルダの中のファイル数
'A4 1枚に3枚づつ写真を貼り付ける。最後の3の倍数では
'シート(ページ)を追加したくない為、ここで最後の3の倍数を確認
If cFiles Mod 3 = 0 Then
cLast = (cFiles \ 3) * 3
End If
'写真を貼り付け
For Each objFile In objFldr.Files
ws.Shapes.AddPicture _
Filename:=objFile, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=20, _
Top:=lngTop, _
Width:=300, _
Height:=200
lngTop = lngTop + 200 + 20
'3回写真を貼ったら、次のページ(シート)を作成
'但し、最後の3の倍数ではページ(シート)を作成しない
If c Mod 3 = 0 And c <> cLast Then
Worksheets("ひな形").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "yymmdd") & "_" & c
Set ws = ActiveSheet
lngTop = 20
End If
c = c + 1
Next
Set objFile = Nothing
Set objFldr = Nothing
Set fs = Nothing
End Sub
たかちゃんさんの投稿
(投稿ID: 4983)
工事現場の作業報告書のようなものを作成してみました。
事前準備:
エクセルでは”ひな形”という名前のシートを作成し、全てのセルの高さ20に設定。
写真の横にコメントを書ける罫線を引くなどしておく。
ひな形シートをコピーして、指定フォルダの写真を3枚貼り
再び、ひな形シートをコピーして、指定フォルダの残りの写真を
3枚づつ貼っていくマクロです。
Excel2019で動作確認済み。記念に投稿させて頂きました。
小川 慶一さんのコメント
(コメントID: 7084)
こんばんは。
ありがとうございます。
投稿されたマクロ、さっそく動かしてみました。楽しいです☆
田中 宏明さんのコメント
(コメントID: 7085)
すご過ぎてコメントが思いつきません。
.Shapes.AddPictureメソッドを初めて知りました。
Excel2010以降のVBAで画像の実体を挿入できるのですね。
小川 慶一さんのコメント
(コメントID: 7086)
> すご過ぎてコメントが思いつきません。
ですね。。
もしも、「どうしてもコメントしてくれ」と言われることがあるとしたら、AddPicture メソッドのリファレンスで、「LinkToFile, SaveWithDocumentの値にはMsoTriState列挙体を使う」と書かれているので、以下のようにリライトしてもいいかな、というくらい。
ビルトインの定数を使うと、可読性が高まる場合があります。
とはいえ、今回の例ではそんなことはなく、むしろ仰々しすぎる感じがあります。True/Falseで表現するほうが分かりやすい気がしますし、あえてそうされたのかなとも思いますが...あとからこの投稿を読まれる方向けのmsgという意味も込めてあえてその旨ここに記しておきます。
Shapes. AddPicture メソッド (Excel)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.shapes.addpicture
MsoTriState列挙体
https://docs.microsoft.com/ja-jp/office/vba/api/office.msotristate
たかちゃんさんのコメント
(コメントID: 7094)
すみません。ありがとうございました。
MsoTriState...どこかで見かけましたが、コメントを読んで意味が分かりました。
自分の備忘録として、また
簡単に実現できるシンプルなプログラムの場合は
いつか誰かのお役に立てそうかなと思って投稿しました。
声をかけて貰えるだけで嬉しいです。
お手間を取らせてしまい、すみません。(^^;
次回はcsvファイルを読んで作業する良い例題を見つけたので
それに挑戦しようと思います。
ネットにあるコードや他の生徒さんのコードを読むのは
本当に勉強になります。
まだ理解できないコードも多いですが、実践で困らないように
少しづつ技を増やしていきたいです。
> もしも、「どうしてもコメントしてくれ」と言われることがあるとしたら、AddPicture メソッドのリファレンスで、「LinkToFile, SaveWithDocumentの値にはMsoTriState列挙体を使う」と書かれているので、以下のようにリライトしてもいいかな、というくらい。