はじめに
前回の記事ではエクセルに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ファイルと画像ファイルの位置関係を変えると表示されなくなるということも有りません。
圧縮画像である点で、多少画像が荒くなる点は否めませんが、ご使用になる目的や環境を考慮して適切な方法を選択してください。