• ベストアンサー

写真を取り込んだ後のメモリー不足について

 いつもお世話になっています。  現在エクセルに写真を取り込んで管理をするマクロを作っています。 取り込む写真の1枚のサイズは2M~6Mぐらいあります。  管理上、写真取り込み用Sheetに20枚から40枚取り込みますが、 将来100枚ぐらい取り込むことも予想されます。  そこでPCやエクセルのメモリー不足の状態が心配になっています。 写真取り込みは Set myPic = ActiveSheet.Pictures.Insert(sFile) で行い、写真のメモリーサイズはそのままにして、セルの大きさに 合わせて表示させています。 また、そのSheetの写真を削除するときに mySP.Delete で行っています。  ここで質問ですが、写真管理で各項目20項目程度について、 上のような取り込み、削除を20回ほど繰り返したいのですが メモリー不足による不具合は起きないでしょうか?  本来は適当に写真のメモリーサイズを小さくしてセル上に乗せるようにすれば いいのでしょうが、その方法が分かりません。 また画面表示のズームで400%ぐらいまで拡大したときにも画像が荒れないようにしたいので、 出来ればサイズはそのままにしておきたいのですが・・・。 環境はXP、メモリー2Gのパソコンです。 また、500Mぐらいのノートパソコンでも使用するつもりです。  どなたかよろしくお願いします。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

> 本来は適当に写真のメモリーサイズを小さくしてセル上に乗せるようにすれば >いいのでしょうが、その方法が分かりません。 貼付けてセルの大きさに合わせて表示後、コピーして貼り付ける その後、元の写真を削除 Set myPic = ActiveSheet.Pictures.Insert(sFile) With myPic   'サイズを変更しても元の比率を保持(規定値がmsoTrueなので省略可)   .ShapeRange.LockAspectRatio = msoTrue   '元の比率を保持しているのでWidth、Height何れかの設定で可   .ShapeRange.Width = ActiveCell.Width   '貼り付けた写真をコピー   .Copy   ActiveSheet.Pictures.Paste   '元の写真を削除   .Delete End With

sintaro-hosome
質問者

お礼

 watabe007さん、どうもありがとうございます。  この方法は、簡単で凄くやりやすそうで良い感じですね。 それで、この方法を使わせていただこうと思います。  ところで、今日職場の自分のノートパソコン(XP、メモリー500Mほど)と職場の古いノートパソコン(WIN2000、メモリー確認できず・・・おそらく500M以下と思われます)で、 写真総容量90Mほどで試したところ、特に不具合も出ずすんなり作業が出来ていました。  やってみた感触ではもっと写真の容量を増やしても大丈夫そうな感じでした。  #1さんとかなり、感触が違うように感じたのですがなぜでしょうか?  セルの大きさは4cm×5cmぐらいにして写真を貼り付けていますが、それだけで内部メモリー使用量はかなり減る物なのでしょうか?  このあたり分かるようでしたら教えていただきたいです。  よろしくお願いします。

その他の回答 (1)

回答No.1

# 回答にはなっていません。ご了承くださいませ。 とりあえず、100MB分くらいのJpeg画像を挿入メニューを使って貼り付けてみました。画面に表示されるまではメモリにロードされないようで使用メモリも少なかったのですが、画面に表示されるごとに使用量が跳ね上がっていき、最終的に物理メモリ+仮想メモリで800MBほど使用。それでも全ての画像が表示されていたわけではないので、それ以上いくと思います。 画像ファイルがJPEGであっても、画面に表示するには無圧縮画像に展開しなければならないのでどうしても使用メモリは増えていきます。ただ、800MB使ってもメモリ不足とは言われなかったので、Excel自体のメモリ許容量はそれなりに大きいと思います。 > 500Mぐらいのノートパソコンでも使用するつもりです さすがにこれは厳しいのでは・・・。メモリ不足云々よりも、多くが仮想メモリに追いやられてパフォーマンス面で不都合がでるような気がします。

sintaro-hosome
質問者

お礼

Wizard_Zeroさん、お返事どうもありがとうございます。 >100MB分くらいのJpeg画像を挿入・・・800MBほど使用 とはやはり、相当危ないですね。  写真1枚平均4M×100枚=400Mぐらいになる可能性もあるので このやり方はやめた方がいいみたいですね。  ところで今後の参考のために教えていただきたいのですが、 Set myPic = ActiveSheet.Pictures.Insert(sFile) で生じるメモリー消費は For Each mySP In Sheets("個人写真表示").Shapes If mySP.TopLeftCell.Row >= 2 Then mySP.Delete Next で開放されるのでしょうか? 一旦上でdeleteさせても、同じ写真でSet myPicを使って表示させると 表示が格段に速くなり、きれいに解放しているようには思えないのですが・・・。 (キャッシュ上に残っている?)  また、Each mySP のmySPは当方どこにも宣言していないのですが こんな使い方でどこのSubでも使えるのでしょうか? つまりmySPの代わりにmySPa、mySPb、mySPcのように勝手な変数名を 使っていいものでしょうか?  最後に、写真のメモリーサイズを小さくしてSheetに貼り付けるには どうすれば良いのか是非お教えいただければありがたいです。 いろいろ質問ばかりで申し訳ありませんが、よろしくお願い致します。

関連するQ&A

専門家に質問してみよう