作業報告書などで写真の貼り付けて提出などの作業は、色々と利用するため今回はこちらを紹介します。
ボタン押下時の実行内容
・貼り付けたい写真の一覧を選択
・印刷範囲を設定しながら写真を指定の位置に貼り付け
今回のポイント
・貼り付け時に写真データの縮小を行っているため、ファイルの容量が少なくしている事
・改ページを挿入しているため、写真の貼り付け後にすぐに印刷が可能な点
Excelファイル

処理の順番の説明
・写真の取り込み
・シートをコピーして末尾に追加
・指定の位置に貼り付け
・写真容量が大きいのでデータの縮小のためJPEGで貼り直し
・写真のNoをセルに記入
・写真の大きさをセルに合わせる
・印刷範囲の設定
処理の実行



印刷範囲を設定しているので印刷もすぐに可能

写真張り付けボタン押下時の処理
Sub 写真張り付け_Click()
'ループ関数を設定
Dim i As Integer, j As Integer, k As Integer
Dim FileName As Variant
Dim dblscal As Double
Dim str As String
'写真の一覧を取得
FileName = Application.GetOpenFilename( _
filefilter:="画像ファイル,*.bmp;*.jpg;*.gif;*.JPG", _
MultiSelect:=True)
'写真ファイルを選択しなかった場合は処理を終わらせる
If Not IsArray(FileName) Then Exit Sub
'処理中画面描写をしない
Application.ScreenUpdating = False
'写真を貼る開始セルの列
j = 2
'写真を貼る開始セルの行
k = 2
'印刷範囲の初期設定
str = Range(Cells(1, 1), Cells(60, 16)).Address
'原本シートのコピーを末尾に追加
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
'ボタンを削除
ActiveSheet.DrawingObjects.Delete
'取得した写真リストをセルに貼り付け
For i = LBound(FileName) To UBound(FileName)
If i <> 1 And i Mod 3 = 1 Then
Worksheets("原本").Range(str).Copy
Cells(k - 1, 1).PasteSpecial
Application.CutCopyMode = False
ActiveSheet.HPageBreaks.Add before:=Cells(((i \ 3) * 60) + 1, 1)
End If
Cells(k, j).Select
'選択ファイル
With ActiveSheet.Shapes.AddPicture( _
FileName:=FileName(i), _
linktofile:=False, _
savewithdocument:=True, _
Left:=ActiveCell.Left, _
Top:=ActiveCell.Top, _
Width:=ActiveCell.Width * 10, _
Height:=ActiveCell.Height * 18)
'結合セルの大きさに設定する場合は下記の内容
'Height:=ActiveCell.MergeArea.Height, _
'Width:=ActiveCell.MergeArea.Width)
End With
ActiveSheet.Shapes(i).Select
Selection.Cut
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False,DisplayasIcon:=False
Application.CutCopyMode = False
'Noに数を記入
Cells(k, j + 13) = i
'次のセルの位置を設定する
k = k + 20
Next i
'コピー範囲を解放
i = i - 1
k = k - 20
Select Case i Mod 3
Case 1
str = Range(Cells(1, 1), Cells(k + 58, 16)).Address
Case 2
str = Range(Cells(1, 1), Cells(k + 38, 16)).Address
Case Else
str = Range(Cells(1, 1), Cells(k + 18, 16)).Address
End Select
ActiveSheet.PageSetup.PrintArea = str
ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = Cells(2, 2).Height * 18
Selection.ShapeRange.Width = Cells(2, 2).Width * 10
Cells(1, 1).Select
'画面描写を実行
Application.ScreenUpdating = True
End Sub
今回は上記のコードを実行した場合に行われる流れを確認していただきました。処理内容の解説は後日行います。
こんばんは、井上と申します。
工事の記録写真帳の作成をどうにか効率化できないかと模索していたところ
yuuyaさんのブログに辿り着きました。(VBAは全くの初心者です。)
私の希望するVBAそのままで、やっと記録写真帳作成の効率化が可能になったと
思っていたのですが、貼付けた写真の縦横が固定されてないことに
気が付きました・・・。このコメント欄で質問することが
失礼でしたら大変申し訳ありません…。
もしご教授いただけるようでしたら、教えていただけますと幸いです。
念のため問合せ内容を記載させていただきます。
一括で貼り付ける写真を挿入するセルの高さに合わせた写真挿入がしたい。
縦の写真は縦のままで(セルの横は隙間が空いても良い)
横の写真は横のままで、縦横の比率は変えずに結合したセルに
一括挿入がしたいです。
それではよろしくお願いいたします。
井上
いいねいいね
井上様
コメントありがとうございます。
写真の縦横比を変更しないで、結合したセルに写真を貼り付けしたいとのことですね。
コメントではコードが綺麗に表示できないため、新たにページを作成致します。
少々、お待ち下さい。
いいねいいね