【VBAリファレンス|実務向け】[Excel VBA実務] 報告書を自動化!画像挿入をマクロで完結させる方法

スポンサーリンク

なぜExcel VBAで画像を挿入する必要があるのか?

実務において、見積書や作業報告書、あるいは製品カタログなどのリストを作成する際、数百枚単位の画像を一つひとつ手作業でセルに配置するのは非常に非効率です。Excelには手動で画像を挿入する機能がありますが、これでは「画像サイズがバラバラ」「配置がずれる」「更新のたびにやり直し」といった課題が発生します。VBAを使えば、特定のセル位置に合わせて画像を自動リサイズし、完璧に配置することが可能です。今回は、実務でそのまま使える「画像自動挿入」のテクニックを解説します。

基礎知識:ShapesオブジェクトとPicturesオブジェクト

Excel VBAで画像を扱う際、主にShapesオブジェクト(図形や画像を含む描画オブジェクト全般)を使用します。
特に重要なのが以下のプロパティです。
・Left / Top:画像の配置位置(左端、上端)を指定します。
・Width / Height:画像のサイズを指定します。
・LockAspectRatio:画像の縦横比を固定するかどうかを設定します。これを「True」にしておかないと、画像が歪んでしまうため注意が必要です。

実装のポイント

実務で画像挿入を自動化する際は、以下の手順をコードに落とし込みます。
1. 挿入したい画像のパスを指定する。
2. 指定したセル(範囲)に画像を貼り付ける。
3. 画像の縦横比を維持したまま、セルのサイズに合わせてリサイズする。
4. 画像の左上をセルの左上に合わせる。

サンプルプログラム

以下のコードは、アクティブセルの位置に指定した画像ファイルを挿入し、セルの中に収まるように自動調整する実用的なマクロです。

Sub InsertPictureToCell()
Dim imgPath As String
Dim targetCell As Range
Dim shp As Shape

' 1. 画像のパスを指定(実務ではここを動的に変更してください)
imgPath = "C:\Users\Public\Pictures\Sample.jpg"

' 2. 画像を挿入するセルを指定(今回は現在選択しているセル)
Set targetCell = ActiveCell

' 3. 画像を挿入
Set shp = ActiveSheet.Shapes.AddPicture( _
Filename:=imgPath, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=targetCell.Left, _
Top:=targetCell.Top, _
Width:=-1, _
Height:=-1) ' -1を指定すると元のサイズで挿入される

' 4. 画像のサイズ調整
With shp
.LockAspectRatio = msoTrue ' 縦横比を固定
' セルのサイズに合わせて幅を調整(セルの幅の90%にする例)
If .Width > targetCell.Width 0.9 Then
.Width = targetCell.Width 0.9
End If
End With

' 5. 画像をセルの中央に配置(微調整)
shp.Left = targetCell.Left + (targetCell.Width - shp.Width) / 2
shp.Top = targetCell.Top + (targetCell.Height - shp.Height) / 2

MsgBox "画像の挿入が完了しました!"
End Sub

応用・注意点

現場で活用する際の注意点は以下の3つです。
1. パスの誤り:画像ファイルが移動・削除されるとエラーになります。Dir関数を使って、ファイルが存在するか事前にチェックする処理を入れると堅牢性が増します。
2. 大量挿入時の動作:何百枚もの画像を一度に挿入するとExcelが重くなります。画面更新を停止する「Application.ScreenUpdating = False」を冒頭に入れ、最後にTrueに戻すことで、処理速度を大幅に向上させることができます。
3. 画像がセルからはみ出る:画像挿入後に「配置」の設定で「セルに合わせて移動やサイズ変更をする」を選択しておくと、行の高さや列の幅を変更した際、画像も一緒に追従してくれるようになり、メンテナンスが非常に楽になります。

まずは1枚の挿入から試して、ぜひ業務の効率化に役立ててください。

タイトルとURLをコピーしました