質問: excel セルに入力した画像名からフォルダの画像を自動表示させたい はじめまして。 excelで、セルに画像名を入力したら指定した場所にフォルダの画像を自動で表示できるようにしたいです (a1に「空」と入力したらフォルダ内にある「空」という名前の写真が表示される)。 https://oshiete.goo.ne.jp/qa/3749418.html こちらの回答者様のコードを参考にし自動表示させるところまではいったのですが、わたしの知識では画像が1枚しか表示されず(セルa1しか指定していないのでa1に入力した画像しか表示されません)、また、画像の大きさも指定出来ていないのでサイズが大きいままドンと表示されてしまいます。 a1に入力した画像はb1に、a3に入力した画像はb3に、、というように場所の指定とサイズの指定をしたいのですが調べても調べても解決せず、お力を貸して頂けないでしょうか。 (同じような内容に対する回答のコードも使用させて頂きましたが解決に至りませんでした。) 宜しくお願い致します。
回答: 貼り付ける例が2つ出ていますが、相対位置は分かりますが、どの位あるのか不明です。 また、resizeを希望されているようですが、どのようなサイズにしたいのかも不明です。 しかし、ご自身で検証などを行っているようなので、そのあたりは、変更してください。 リンク先のものを検証されていると思いますので、構造的なところは変更せず下記に解る範囲のものを サンプルとして挙げます。 private sub worksheet_change(byval target as range) const path as string = "c:\hoge\" 'ファイルの格納フォルダ const pic as string = ".jpg" '「.(半角)」+ファイルの拡張子" dim shp as shape dim buf as string if target.address(0, 0) = "a1" or target.address(0, 0) = "a3" then '実行されるセル for each shp in activesheet.shapes '表示画像を削除 if not intersect(target.offset(, 1), range(shp.topleftcell, _ shp.bottomrightcell)) is nothing then shp.delete end if next buf = dir(path & target.value & pic) if buf <> "" then target.offset(, 1).select '貼り付けセル set shp = activesheet.shapes.addpicture( _ path & buf, _ msofalse, msotrue, selection.left, selection.top, -1, -1) ' ここで画像サイズ、セル内配置などを設定する ' 上のmsotrueをmsofalseに設定すると縦横比を破棄します ' 画像の縦横比を維持しているので片方で指定で良い ' shp.height = 50 'resize shp.width = activecell.width ' shp.height = activecell.height target.offset(2).select else msgbox "指定したファイルがありません" end if end if end sub 改造と理解が必要なところ if target.address(0, 0) = "a1" or target.address(0, 0) = "a3" then '実行されるセル ここで、実行されるセルのchangeを分岐しています。(今回例はa1 a3 です。) 規則性や範囲などで設定したり、intersectなどで設定する事が多いと思います。 target.offset(, 1) 実行されたセルの1つ右隣 shapes.addpictureメソッドのパラメータ addpicture(filename、 linktofile、 savewithdocument、 left、 top、 width、 height) shp.width = activecell.width セルに対してサイズ、位置などを合わせるテクニックなど shp.height = activecel.height if shp.width >activecell.width then shp.width = activecell.width end if worksheet_changeで画像を取り込む場合の流れは、ほぼ同様の流れになると思います。 実行されたセルの検証 > 画像の存在検証 > 指定場所の既存画像を削除 > 指定画像を貼り付け > サイズ調整 > 次の準備 エラー処理は、ほぼされておらず、buf = dir(path & target.value & pic)くらいです。 同じ、worksheet_changeイベントに他の処理などがある場合、適時エラー処理を行ってください。