VBA画像ファイルをシートに読み込んで表示します。シートに表示するパターンとしては、画像ファイルの原寸サイズを表示する場合と、画像の縦横比は維持したままサイズを変更する場合、画像の縦横比は無視して変更する場合の3通りを説明します。以降でイメージと表現しているのはExcelシート上の画像(Shapeオブジェクト)のこととします。画像ファイルをシート上に表示するには、ShapesオブジェクトのAddPictureメソッドを利用します。エクセルブック起動時に画像ファイルのリンク情報を元に読み込む(msoFalse)か、エクセルブックにイメージを保存しておくか(msoTrue)。エクセルブック保存時に一緒にイメージを保存する(msoTrue)か、画像ファイルのリンク情報のみ保存するか(msoFalse)。イメージの上端部のシート上での位置(ポイント)。イメージの左端部のシート上での位置(ポイント)。イメージの高さ(ポイント)。原寸表示の場合は-1。イメージの幅(ポイント)。原寸表示の場合は-1。原寸で表示ShapeオブジェクトのAddPictureメソッドの第6引数(幅)と第7引数(高さ)にそれぞれ-1をセットすることで画像ファイルの原寸サイズのイメージになります。下記コードでは、読み込んだ画像を原寸サイズのままshp変数に保存しています。-1)縦横比を維持して幅または高さを変更ShapeオブジェクトのLockAspectRatioプロパティにmsoTrueを指定することで縦横比を固定とすることができます。デフォルトはmsoFalseで縦横比は固定されていません。縦横比を固定すると、「高さ」または「幅」のどちらかを変更することで、もう一方が自動で変更されます。下記コードでは、読み込んだ画像をshp変数に保存し、縦横比を固定にして画像幅を50ポイントに変更しています(縦横比を固定にしているので自動で高さも変更されます)。With縦横比は無視して幅・高さ変更ShapeオブジェクトのAddPictureメソッドの第6引数(幅)と第7引数(高さ)を指定することで、そのサイズのShapeオブジェクトにすることができます。下記サンプルコードでは幅を128ポイント、高さ64ポイントで表示しています。64)読み込みパフォーマンス画像ファイルが少なかったり、シート上に表示するイメージが少なかっったりする場合はあまり気にならないのですが、1000件を超えるイメージをシートに表示するなど件数が増えると表示するのにも時間がかかります。ここでは、画像を読み込んでシートに表示するのにどれぐらい時間がかかるかを計測して比較してみました。計測環境は、Excel2010で5Kb程度の画像ファイルを1500件読み込ん計測しました。画像ファイルは50ファイルを使い回すことにしました。1つめは、全てのイメージを画像ファイルから読み込む方法です。同じイメージがあったとしても画像ファイルから読み込む方法です(表では「全て読み込む」)。2つめは、1度読み込んだ画像をメモリーに保存しておき、2回目以降その画像をコピーして利用する方法です(表では「再利用」)。今回の環境では、画像をコピーした場合の方(表の「再利用」)が、都度画像ファイルにアクセスして読み込む(表の「全て読み込む」)より1/3の時間で行うことができています。ファイルアクセス部分がネックとなって時間がかかっているようです。イメージの重複が多ければ、イメージをコピーして表示する方が格段に早くなりますが、イメージの重複が少ない場合はそれほど恩恵を得られません。重複イメージの量に応じて再利用するか全て読み込むかを決めていくことになります。イメージの再利用は、ShapeオブジェクトのDuplicateメソッドでコピーすることができます。簡単なサンプルコードを載せておきます。実際にはDictionaryオブジェクトを使ってShapeオブジェクトを管理して利用する方法になると思います。コメントをキャンセル入力欄すべて入力してください。メールアドレスが公開されることはありません。内容をご確認の上、送信してください。有限会社おかもとでんか。