Excelでフォトアルバム!VBAマクロでExcelに画像を貼り付ける方法【注!サンプル訳アリ】

はじめに

エクセルは表計算ソフトですが、資料作成などで画像を貼り付けることがあると思います。通常は「挿入」タブから「図→画像」と選択し、対話的に画像を挿入していることと思います。

しかし、貼り付ける画像が1.2枚であればこの方法でもいいかもしれませんが、これが数十枚、数百枚となっていくといちいちタブから選択する操作がめちゃくちゃ煩わしいものと感じるようになるでしょう。
たかが画像、されど画像で、単純繰り返し作業はできるだけVBAマクロの力を借りてさっさと片付けたいものです。

【注意】本記事で紹介するPictures.Insert メソッドは挿入した画像がリンクとして挿入される不具合が報告されています。使用する際は本記事を最後まで読んで、注意事項を守ってお使いください。

VBAマクロでExcelに画像を貼り付ける方法を紹介する本記事の目的

本記事ではVBAマクロを使ってExcelに画像を貼り付けることを目的とします。

ただ単に貼り付けるだけでは「自動化」とは言いづらいので、指定のセルの縦横幅を計算して、ちょうどセルに収まるように貼り付けることを目的とします。

また、貼り付ける作業を直感的に素早く行うことができるようにダブルクリックイベントにマクロを登録し、実行できるようにしてあります。このようにすることで、大量の画像貼り付け作業もダブルクリック一つでできるようになるので作業効率が向上するものと思います。

VBAマクロでExcelに画像を貼り付ける方法を実行する処理の流れ

処理の流れとしては、

VBAマクロをダブルクリックに登録する

ダイアログボックスを開いて貼り付けたい画像ファイルを選ばせる

画像のサイズと貼り付け先のセルの大きさを取得し、サイズを調整する

セルのセンターに画像の中心が来るように貼り付ける

という流れになります。

VBAマクロでExcelに画像を貼り付ける方法に使用する関数・プロパティなど

Pictures.Insert メソッド
画像ファイルを引数に取り、指定された画像を貼り付けるメソッド。
【注】冒頭でも申したとおり、Pictures.Insert メソッドは挿入した画像がリンクとして挿入される不具合が報告されています。

ここで言っている「挿入した画像ファイルがリンク」とはつまり挿入時の位置に画像ファイルがないと、Excel側から画像を参照することができず、リンク切れとして表示されるということです。

この不具合からの解消方法は、次回詳述しますので、本記事のサンプルはご使用方法にご注意ください。

VBAマクロでExcelに画像を貼り付けるサンプルコード

それではサンプルコードです。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim PicFile As Variant
    Dim rX As Double, rY As Double
    
    
   
    '[ファイルを開く]ダイアログボックスを表示
    PicFile = Application.GetOpenFilename( _
                        "画像ファイル,*.jpg;*.jpeg;*.gif;*.tif;*.png;*.bmp")
    If VarType(PicFile) = vbBoolean Then Cancel = True: Exit Sub

    Application.ScreenUpdating = False
        
    '画像を挿入
    '【注】画像がリンクとして挿入されるので、挿入時から画像ファイルを動かすと非表示になる
    With ActiveSheet.Pictures.Insert(PicFile)
        rX = Target.Width / .Width
        rY = Target.Height / .Height
        If rX > rY Then
            .Height = .Height * rY
        Else
            .Width = .Width * rX
        End If

        'セルの中央に配置
        .Left = Target.Left + (Target.Width - .Width) / 2
        .Top = Target.Top + (Target.Height - .Height) / 2
        
        
    End With
    
    Application.ScreenUpdating = True
    Cancel = True

End Sub

繰り返し述べていますが、このマクロを使ってExcelに画像を貼り付けると、貼り付けた画像を別フォルダなどに動かすとリンク切れとなって表示されなくなりますので注意が必要です!

貼り付けたときと同一フォルダに有る場合

フォルダから写真を動かした場合

終わりに

本記事ではVBAマクロから所定のセルへ画像をサイズを整えて貼り付ける方法をご説明しました。

記事内で申し上げたとおり、画像はリンクとして張り付くので、画像の位置を変えてしまうと表示されなくなってしまいます。もしこのままお使いになる場合はその点にご注意ください。

次回は本記事のマクロをベースに、画像を圧縮して貼り付ける方法をご説明したいと思います。