• 締切済み

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

エクセルでデータベースを作成しております。 指定したデータを「VLOOKUP」などを使って、別のエクセルファイルに書き出そうと思っています。その際に、データをあらわす別の画像ファイル(jpg)を自動的に取り込んでくることはできるのでしょうか? 説明が下手で済みませんが、具体的には以下のとおりです セルA1に「IMG001」と入力すれば、セルA2に特定のフォルダにある「IMG001.jpg」という画像を自動で貼り付けてくれるようにしたいのです。同じようにセルB1入力したものがB2に、セルC1が・・・・といった具合です。 データの量が多いもので、少しでも手間を省きたいのです。 よろしくご教示ください。

みんなの回答

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.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ウィンドウを閉じる

goo-g-boo
質問者

お礼

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

  • thetaII
  • ベストアンサー率25% (7/27)
回答No.1

VBAを使えば可能です。 たとえばセルA1にフルパスで参照したい画像のファイル名を入れておき、適当なボタンに ・・・ Range("A2").Select ActiveSheet.Pictures.Insert(Cells(1, 1)).Select ・・・ と記述してやり、ボタンを押せば、"A1"で指定したファイルが"A2"の位置に表示されます。 これを応用して、セルに入っているファイルを順にシート上に表示していくことはfor...nextやLoopを利用すれば簡単に実現すると思いますが。

goo-g-boo
質問者

お礼

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