• ベストアンサー

VBAマクロ、画像の自動読込

マクロ(excel2013)の方で、指定フォルダに指定ファイルを配置しておけば、 自動でワークシートに読み込んで表示する、という設定にしたいです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#1です。#1に追加。 (1)エクセルに画像挿入したファイルの名前の後尾に1文字でも追加して、ファイル名を変えて、エクセルに画像挿入したことのしるしにする。ファイルは元のフォルダにあるまま。 次の機会にこのファイル(1文字追加されたファイル名のもの)を読んだら、エクセルに画像挿入処理をしない(読み飛ばす)。 (2)他の方法として、ファイルの日時で判断する。これについて、前に読んだことを残す、ふさわしいファイル属性の項目が無いように予想するが、勉強してみて。。 ーーー 丸投げしていることから、#1の文章ヒントだけでは何もできないかもしれないので、コード例を挙げてみる。 エクセルシートで1列に下方向に写真を配置していく例。 フォルダ名、ファイル名は当然自分のケースに修正すること。 下部に添えたモジュールTest02()は、テストのとき張り付けた多数の画像を一斉削除したい場合があり、重宝しそうなので、ついでに載せる。 写真は1枚1セルに入れている。セルの大きさは見やすいような大きさに前もって(実行するに先立って)シート上で手動設定しておくものとする。VBAでもできるが課題を増やさぬようにするため略。 Sub test01() Set objfs = CreateObject("scripting.filesystemobject") Set objfolder = objfs.getfolder("C:\Users\xxx\Pictures") ActiveSheet.Range("A3").Select For Each objfile In objfolder.Files sBaseName = objfs.GetExtensionName(objfile) If sBaseName = "JPG" Then 'MsgBox sBaseName 'MsgBox objfile.Name w = ActiveCell.Width w = ActiveCell.Height Set myShape = ActiveSheet.Shapes.AddPicture(Filename:=objfile, _ LinkToFile:=False, SaveWithDocument:=True, _ Left:=Selection.Left, Top:=Selection.Top, Width:=w, Height:=h) With myShape .ScaleHeight 1, msoTrue .ScaleWidth 1, msoTrue .LockAspectRatio = msoTrue .Height = ActiveCell.Height - 5 ' 画像高さ = セルの高さ-5 End With ActiveCell.Offset(1, 0).Activate End If Next End Sub ーーー Sub test02() ActiveSheet.DrawingObjects.Delete End Sub みなWEBにある例を多少修正しただけのもの。

thwrags
質問者

お礼

ありがとうございます

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

>指定フォルダ(Aと称する)に指定ファイルを配置しておけば・・ 「>読み込んで表示された」画像は、(自動で、VBAで、質問者にとって別の)決まったフォルダ(Bと称する)に移して入れる。 追加される画像は、指定されたフォルダ(A)に必ず(たぶん人間が)いれる。 を実行できるなら、下記のことをできればよいと思うがよいか。 すると、課題は (1)指定フォルタ(A)から画像指定ファイルをBに移す。 (2)Bフォルダのすべてのファイルを順次読み取りエクセルのシートに画像として挿入する。 その後そのファイルを、(1)の作業をする。 こういう風に考えを整理すること。 Aフォルダにはシートに読み込んだ「しるし」を付ける「普通の方法」は無いし、シートに読みこんであるファイルを調べて、Aの画像との関連で読み込んでないものを判別するのは複雑な方法になろう。 ーー 勉強点は2つ (1)1指定ファイルを別フォルダに移す(Move)コード (2)Bフォルダのファイルを1つずつ読んでシートに張り付けるコード    「貼り付ける}部分は、マクロの記録でもやってみること。 (1)(2)はWEBでVBScript関連で照会して勉強のこと。 (1)はhttp://www.happy2-island.com/vbs/cafe02/capter00209.shtmlなど (2)など頻出質問の1つだ。For Eachの問題。 この質問は丸投げである。マクロの記録ぐらい質問の前にやって、また上記のごとく、質問をサブ要素に砕く練習をしてみること ーー (1)シート上での配置状況とか質問に書いてない (2)シート上の配置順序を注文されると、むつかしくなる。 質問に書いてないので、そくっりの回答は誰にもできないだろう。

thwrags
質問者

お礼

ありがとうございます