Excelに貼った画像が重い!?VBAマクロでExcelに貼り付けた画像を軽くする方法【サンプル有り】

はじめに

前回の記事ではエクセルにVBAマクロを使って所定のセルに画像を整えて貼り付ける方法をご紹介しました。しかし、前回ご説明したとおり、Pictures.Insert メソッドは挿入した画像がリンクとして挿入される不具合が報告されています。

この不具合を回避しつつ、同時に画像を圧縮形式で貼り付ける方法を今回はご紹介します。

「先にこっちを紹介すればいいじゃないか!」

と思われるかもしれませんが、圧縮する分、画像が劣化するので前回の形式で貼り付けたほうが鮮明な画像を貼り付けることができます。

どちらを取るかは、画像を貼り付けるユーザーの好み(というか必要性)によって変わると思うので、注意点に気をつけて合う方をお使いください。

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

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

基本的には前回ご紹介した画像へ貼り付ける方法をベースとして、最後に画像をjpeg形式に圧縮して貼り付けることを目的とします。

圧縮する分データは軽くなりますが、解像度が落ちるため、画像が荒くなる点は注意が必要です。

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

処理の流れとしては、

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

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

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

セルのセンターに画像の中心が来るように貼り付ける←前回ココまで!

貼り付けた画像をコピーして圧縮形式(Jpeg形式)で同じところに貼り付ける

もとの画像データを消去する

という流れになります。

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

PasteSpecial メソッド (Excel)
PasteSpecial(Format、 Link、 DisplayAsIcon、 IconFileName、 IconIndex、 iconlabel、 nohtmlformatting)

指定された形式で、クリップボードの内容をシートに貼り付けます。

他のアプリケーションからデータを貼り付けるときや、あるいは特別な形式でデータを貼り付ける場合に使います。

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
        

    '↓今回追加された分↓
        .Copy
        ActiveSheet.PasteSpecial Format:="図 (JPEG)"
    
        Selection.Top = .Top
        Selection.Left = .Left
    
        .Delete
    End With
    
    Application.ScreenUpdating = True
    Cancel = True

End Sub

実行結果

肉眼ではあまり圧縮による劣化はわかりませんが、実は印刷すると画質がイマイチになることがあります。用途に応じて使い分けてください。
なお、圧縮しないでリンクにより貼り付けた画像は、相変わらず貼り付けたときのフォルダから貼り付けた画像を動かすとリンク切れで表示されなくなります。

画像リンク切れ

終わりに

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

今回の方法を使用することでExcelファイルのデータサイズを抑えることが可能です。また、前回ご紹介したリンクによる貼付けのように、写真を貼り付けたExcelファイルと画像ファイルの位置関係を変えると表示されなくなるということも有りません。

圧縮画像である点で、多少画像が荒くなる点は否めませんが、ご使用になる目的や環境を考慮して適切な方法を選択してください。