Excelで特定のセルをダブルクリックして画像を挿入するVBAは便利ですが、通常のPictures.Insertでは画像のリンク情報だけが保存され、他のPCでファイルを開くと表示されないことがあります。本記事では、埋め込み画像として保存する方法と、全PCで表示できるVBAの書き方を解説します。
問題の原因
従来のActiveSheet.Pictures.Insertメソッドは、画像ファイルへのリンクを作成します。そのため、挿入した画像ファイルが保存されているPC以外では画像が表示されません。リンク先が存在しない場合に”表示されません”と出るのです。
解決方法:画像を埋め込む
解決策は、画像をWorkbookに埋め込み、リンクではなくファイル内に保存することです。これにはShapes.AddPictureメソッドを使い、リンクをFalseに設定します。
例。
Dim pic As ShapeSet pic = ActiveSheet.Shapes.AddPicture(Filename:=fd.SelectedItems(1), _LinkToFile:=msoFalse, SaveWithDocument:=msoCTrue, _Left:=Target.Left, Top:=Target.Top, Width:=Target.Width, Height:=Target.Height)
この方法で挿入した画像はExcelファイル内に保存されるため、他のPCでも画像が表示されます。
ダブルクリックイベントで実装する例
Worksheet_BeforeDoubleClickイベントを使い、対象セルを指定して画像を挿入する例。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)Cancel = TrueIf Not Intersect(Target, Union(Range("C8"), Range("O8"), Range("AA8"))) Is Nothing ThenDim fd As FileDialogSet fd = Application.FileDialog(msoFileDialogFilePicker)With fd.Title = "Select an Image File".Filters.Clear.Filters.Add "Image Files", "*.GIF; *.JPG; *.JPEG; *.BMP; *.PNG; *.TIF", 1If .Show = -1 ThenDim pic As ShapeSet pic = ActiveSheet.Shapes.AddPicture(Filename:=.SelectedItems(1), _LinkToFile:=msoFalse, SaveWithDocument:=msoCTrue, _Left:=Target.Left, Top:=Target.Top, Width:=Target.Width, Height:=Target.Height)End IfEnd WithEnd IfEnd Sub
注意点
- 挿入する画像はサイズをTargetセルに合わせるとレイアウトが整います。
- 複数PCで利用する場合でも、画像はExcelファイル内に埋め込まれるため安心です。
- Shapes.AddPictureのLinkToFileは必ずmsoFalseにしてください。
まとめ
他PCでも画像を表示させるには、Pictures.InsertではなくShapes.AddPictureを使い、リンクではなく埋め込みとして挿入することがポイントです。これにより、ダブルクリックで画像を挿入するVBAが、どのPCでも正常に表示されるようになります。


コメント