【Excel VBA】セルに画像を一括でコメント表示する方法!(大量対応/初心者OK)

【アフィリエイト広告を利用しています】
スポンサーリンク

前回は、セルにカーソルを合わせると、コメントで画像を表示する方法をお伝えしたのですが、手動でコメントを設定するのは、かなりの手間がかかります。
そこで、今回は「大量のコメントをマクロで一気に登録する方法」をお伝えしたいと思います!

初心者さんにも分かりやすくお伝え出来たらと思います!

いのこ
いのこ

【ご注意】
Excelのバージョンによってコメントの仕様が異なるため、以下のマクロはコメントが使える環境を前提としています

「セルにカーソルを合わせるとコメントで画像を表示する」とは

【Excel】コメントに画像を表示する方法

「りんご」と入力されたセルにカーソルを合わせると、りんごの画像が表示され、カーソルを外すと画像は非表示になる、そういうコメントをエクセルでは作成することができます。手順は、

  1. セルにコメントを追加する
  2. 色設定で背景に画像を設定する
  3. サイズを調整する

これを一つ一つのセルに設定する必要があり、とても手間がかかります。
そこで今回は、そのコメントをマクロを使って一括設定する方法をお伝えします。

♦ マクロを作成する前の準備

1. エクセルファイルを用意する

エクセルのファイルを用意します。
今回のマクロでは、A列の製品名のみ使用します。
他の列は何が記入されていてもいいのですが、A列のデータは重複のないように作成します。

2. 画像を用意する

エクセルファイルと同じ階層に、「製品画像」という名前のフォルダを作ります。
そしてそのフォルダに、実際に表示したい画像を保存します。

【Excel】コメントに画像を表示する方法
  • 保存する画像の名前は、製品名と全く同じ名前で保存すること
  • 画像の拡張子は統一すること

♦ コメントに画像を自動挿入するマクロ

いのこ
いのこ

本当に初めてマクロに触れる方、良ければこちらの記事を読んでみてください!
【初心者向け】Excelマクロの始め方|基本から自動化のコツまで解説 – いのこblog

以下が、今回使用するマクロ。動作を簡単に説明すると、こんな感じ。

  1. A列のセルの値に「.jpg」を付けたファイルが「製品画像フォルダ」にあるか確認
  2. ファイルがあったら、セルにコメントを追加する
Sub コメント追加()

Dim Ws As Worksheet
Dim FileName As String
Dim FolderPath As String
Dim FilePath As String
Dim LastRow As Long
Dim n As Long

Set Ws = ThisWorkbook.Sheets(1)
FolderPath = ThisWorkbook.Path & "\製品画像"
LastRow = Ws.Cells(Rows.Count, 1).End(xlUp).Row

For n = 2 To LastRow
    
    FileName = Ws.Cells(n, 1).Value
    FilePath = FolderPath & "\" & FileName & ".jpg"
    
    If Dir(FilePath) <> "" Then
    
    If Not Ws.Cells(n, 1).Comment Is Nothing Then
        Ws.Cells(n, 1).Comment.Delete
    End If
        
    With Ws.Cells(n, 1).AddComment("")
        .Shape.Fill.UserPicture FilePath
        .Shape.Height = 100
        .Shape.Width = 100
        .Visible = False
    End With

    End If

Next n

End Sub

そのまま標準モジュールへ貼り付けても大丈夫です!

このマクロを実行した結果がこちら!

【Excel】コメントに画像を表示する方法

製品名と同じ名前の画像データがあるセルのみコメントが追加されます。

マクロの解説

マクロの解説です。ご自身のデータに反映しやすいよう、分かりやすくお伝えしたいと思います。

Sub コメント追加()

①
Dim Ws As Worksheet
Dim FileName As String
Dim FolderPath As String
Dim FilePath As String
Dim LastRow As Long
Dim n As Long

②
Set Ws = ThisWorkbook.Sheets(1)
FolderPath = ThisWorkbook.Path & "\製品画像"
LastRow = Ws.Cells(Rows.Count, 1).End(xlUp).Row

③
For n = 2 To LastRow
    
  ④
    FileName = Ws.Cells(n, 1).Value
    FilePath = FolderPath & "\" & FileName & ".jpg"
    
  ⑤
    If Dir(FilePath) <> "" Then
    
  ⑥
    If Not Ws.Cells(n, 1).Comment Is Nothing Then
        Ws.Cells(n, 1).Comment.Delete
    End If
    
  ⑦    
    With Ws.Cells(n, 1).AddComment("")
        .Shape.Fill.UserPicture FilePath
        .Shape.Height = 100
        .Shape.Width = 100
        .Visible = False
    End With

    End If ⑤のEnd

Next n ③のNext

End Sub

① 変数の宣言

この部分は、マクロ全体で使用する“変数(中身のデータを自由に変更できる箱のようなもの)”を最初にまとめて宣言している部分です。
Excel VBAでは、どんな値を入れるかあらかじめ「型かたち」を指定しておくことで、マクロが正しく動作し、エラーの予防にもつながります。

Dim Ws As Worksheet 'ワークシートを入れるための変数
Dim FileName As String  '画像ファイル名(拡張子なし)を入れる
Dim FolderPath As String    '画像フォルダ(製品画像)の場所を入れる
Dim FilePath As String    'FolderPath と FileName を組み合わせた「フルパス」を入れる
Dim LastRow As Long
Dim n As Long

② セットアップ

この3行は、マクロを実行するための「前準備」を行う重要な部分です。
どのシートを対象にするか・画像フォルダの場所・処理する最終行を決めています。

Set Ws = ThisWorkbook.Sheets(1)
FolderPath = ThisWorkbook.Path & "\製品画像"
LastRow = Ws.Cells(Rows.Count, 1).End(xlUp).Row
  1. ThisWorkbook はマクロが書かれているブックを指し、Sheets(1) は一番左にあるシート(1番目のシート)を意味します。それを Ws 変数にセットします
  2. 画像ファイルが入っているフォルダのパスを FolderPath に格納します
  3. 「処理する行の範囲」を自動で判定しています。A列の最終行を LastRow に格納します

③ コメントを付ける範囲を

A列にデータが入っている行すべてに対して、順番にマクロを実行するという仕組みになります。この For~Next の間に書かれた処理が、2→3→4→…と繰り返し実行されるようになります。

For n = 2 To LastRow

④ セルの値から画像ファイルのフルパスを作成する部分

この2行で、画像ファイルの名前と保存場所をつなげて、画像ファイルのフルパスを作っています。

    FileName = Ws.Cells(n, 1).Value
    FilePath = FolderPath & "\" & FileName & ".jpg"

画像ファイルの種類によって、 ".jpg" の部分は修正してください。

⑤ 画像が存在するかチェック

Dir関数は指定したパス内のファイル名を取得するときに使用する関数ですが、下記のように記述することで、そのファイルが存在するかどうかを確認することができます。

    If Dir(FilePath) <> "" Then

ファイルが存在する場合はそのファイルパスを返し、ファイルが存在しない場合は空白(””)を返します。上記の場合は、ファイルが存在する場合以下の作業を行う、となります。

⑥ すでにあるコメントは削除してから追加

セルにすでにコメントが存在していると、VBAはエラーとなる場合があります。

    If Not Ws.Cells(n, 1).Comment Is Nothing Then
        Ws.Cells(n, 1).Comment.Delete
    End If

そのため、セルにコメントが存在する場合はコメントを削除する、上記の記述を記載しておくと安心です。

⑦ コメントを画像を設定して挿入

    With Ws.Cells(n, 1).AddComment("")
        .Shape.Fill.UserPicture FilePath
        .Shape.Height = 100
        .Shape.Width = 100
        .Visible = False
    End With

.Shape.Fill.UserPicture FilePath → コメント枠に画像を設定

.Visible = False → 普段は非表示、カーソルを合わせたときだけ画像が見える

.Shape.Height / Width → 画像の大きさを調整

いのこ
いのこ

Excel 2019 以降で導入されたメモ機能には、画像を挿入する機能はありません。
上記のマクロを実行すると、下記のように表示される可能性があります。

【Excel】コメントに画像を表示する方法

この場合は、コメントに画像を設定することは出来ません。

📌 うまく画像が入らない/コメントが表示されない場合は…

  • Excel のバージョンが新しく、「コメント=スレッド形式」を使っている → 画像挿入できない。必ず「メモ (Note/旧コメント)」であることを確認してください。
  • ファイル名(セルの内容)と実際の画像ファイル名が一致していない(大文字/小文字、拡張子、全角・半角 など)
  • 画像フォルダの場所が正しく設定されていない
タイトルとURLをコピーしました