こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

セルに記述したファイル名の画像を自動的に挿入する

エクセルでデータベースを作成しております。
指定したデータを「VLOOKUP」などを使って、別のエクセルファイルに書き出そうと思っています。その際に、データをあらわす別の画像ファイル(jpg)を自動的に取り込んでくることはできるのでしょうか?

説明が下手で済みませんが、具体的には以下のとおりです

セルA1に「IMG001」と入力すれば、セルA2に特定のフォルダにある「IMG001.jpg」という画像を自動で貼り付けてくれるようにしたいのです。同じようにセルB1入力したものがB2に、セルC1が・・・・といった具合です。
データの量が多いもので、少しでも手間を省きたいのです。
よろしくご教示ください。

投稿日時 - 2005-03-13 03:39:21

QNo.1266199

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

マクロを作ってみました。
1行目をクリックすると、あらかじめ登録してあるフォルダの中に在るjpgファイルがリストアップされますので、そこから画像を選択すると、下の行に画像が自動的に貼り付けられます。
また、既に入力した行の書き換えや消去にも対応しています。(選択しなおせば絵も変更し、消去すれば絵も消去されます)
(2行目に落書きをしてしまいます(貼り付けた画像のオブジェクト名)が、貼り付けた画像により隠れるので、特に問題は無いとは思います。

よろしければご利用ください。なお今回は、画像を保存してあるフォルダはめったに変更しないものとして作成しました。
変更する際は、下のコードの

'ここからを必要に応じて変更してください-------------
  画像保存パス = "C:"
'ここまでを必要に応じて変更してください-------------

の""の中を書き換えてください。


'ここから--------------------------------------------------------------------
Public 画像保存パス As String

Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  On Error GoTo ERREND
  If Target.Row = 1 Then
    If Target.Value = Empty Then
      Pictures(Target.Offset(1, 0).Value).Delete
      Target.Offset(1, 0).Delete
      GoTo ERREND
    End If
    If Target.Offset(1, 0).Value <> Empty Then
      Pictures(Target.Offset(1, 0).Value).Delete
    End If
    Target.Offset(1, 0).Activate
    Pictures.Insert(画像保存パス & "\" & Target.Value & ".jpg").Select
    Target.Offset(1, 0).Value = Selection.Name
    Target.Validation.Delete
  End If
ERREND:
  Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'ここからを必要に応じて変更してください-------------
  画像保存パス = "C:"
'ここまでを必要に応じて変更してください-------------
  
  Dim FILLIST, FINDNAM As String
  If Target.Row = 1 Then
    FINDNAM = Dir(画像保存パス & "\*.jpg")
    Do Until FINDNAM = Empty
      FILLIST = FILLIST & "," & Left(FINDNAM, Len(FINDNAM) - 4)
      FINDNAM = Dir
    Loop
    If FILLIST = 0 Then Exit Sub
    FILLIST = Right(FILLIST, Len(FILLIST) - 1)
    Target.Validation.Delete
    Target.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=FILLIST
  End If
End Sub
'ここまで--------------------------------------------------------------------


上記コードの貼り付け方が分からない場合は、以下を参照してください。

Excel2000以降
1) 上記の操作をしたいシートのタブを右クリックし、「コードの表示(V)」をクリック
2) 表示されたMicrosoft Visual Basicウィンドウの右側の白い部分に貼り付ける
3) Microsoft Visual Basicウィンドウを閉じる

Excel97以前
1) Alt+F11でMicrosoft Visual Basicウィンドウを表示させる。
2) 左側の「プロジェクト」とかかれた部分から、上記の操作をしたいシート名を探し、ダブルクリック
3) 右側の白い部分に貼り付ける
4) Microsoft Visual Basicウィンドウを閉じる

投稿日時 - 2005-03-13 19:06:13

お礼

ありがとうございました。
しかし、勉強不足でまだ活用できておりません。
がんばってみます。

投稿日時 - 2005-03-13 22:39:29

ANo.1

VBAを使えば可能です。
たとえばセルA1にフルパスで参照したい画像のファイル名を入れておき、適当なボタンに
・・・
Range("A2").Select
ActiveSheet.Pictures.Insert(Cells(1, 1)).Select
・・・
と記述してやり、ボタンを押せば、"A1"で指定したファイルが"A2"の位置に表示されます。

これを応用して、セルに入っているファイルを順にシート上に表示していくことはfor...nextやLoopを利用すれば簡単に実現すると思いますが。

投稿日時 - 2005-03-13 05:52:27

お礼

早速やってみました。
for...next、LOOP
は活用できなかったのですが、挿入の数だけ上記ボタンを作成して代用しています。これから勉強します。
ありがとうございました。

投稿日時 - 2005-03-13 18:39:56

あなたにオススメの質問