この記事では、画像ファイルの数だけimageコントロールを生成して画像を表示させる方法についてご説明します。
【動画】画像ファイルの数だけimageコントロールを生成して画像を表示させる実際の動き
本題に入る前に、まずは次の動画をご覧ください。
表にある画像ファイルのフルパスを元に、Imageコントロールに画像が表示されます。
Excelファイルと画像ファイルの例
今回は以下のExcelファイルと画像ファイルを用意しました。
Excelのシートには、画像ファイルのフルパスが入力された表があり、このフルパスをマクロが参照してイメージコントロールに表示させます。
その画像ファイルを上記のフォルダに10枚格納してあります。
イメージコントロールに10枚の画像を表示させた結果は下のとおりです。
マクロ作成の流れ
イメージコントロールを生成する際、画像ファイルのフルパスやイメージコントロールのサイズの設定値などを設定します。
コードの例
Option Explicit Sub test() Dim ws As Worksheet 'ワークシート変数 Dim cnt As Long 'カウンタ用変数 Dim imgControl As Object 'イメージコントロール用変数 Dim imgLeft As Double 'イメージコントロールの左位置 Dim imgTop As Double 'イメージコントロールの上位置 Dim imgWidth As Double 'イメージコントロールの横幅 Dim imgHeight As Double 'イメージコントロールの縦幅 Dim imgPath As String '画像ファイルのフルパス 'シート名を取得する Set ws = Worksheets("top") 'イメージコントロールの左位置の値を取得する imgLeft = 10 'イメージコントロールの上位置の値を取得する imgTop = 30 'イメージコントロールの横幅の値を取得する imgWidth = 50 'イメージコントロールの縦幅の値を取得する imgHeight = 50 '画像の数だけ処理を繰り返すFor文 For cnt = 1 To 10 '画像ファイルのパスを取得する imgPath = ws.Range("B" & cnt + 8).Value 'イメージコントロールを生成して画像を表示させる Set imgControl = ws.Shapes.AddPicture(Filename:=imgPath, _ LinkToFile:=msoTrue, _ SaveWithDocument:=msoTrue, _ Left:=imgLeft, _ Top:=imgTop, _ Width:=imgWidth, _ Height:=imgHeight) 'イメージコントロールの位置を更新 imgLeft = imgLeft + imgWidth + 10 Next cnt End Sub
注目すべきコード①
最初に見て頂きたいのは18行目から27行目です。
'イメージコントロールの左位置の値を取得する imgLeft = 10 'イメージコントロールの上位置の値を取得する imgTop = 30 'イメージコントロールの横幅の値を取得する imgWidth = 50 'イメージコントロールの縦幅の値を取得する imgHeight = 50
コードの説明
以上のコードは、イメージコントロールの左位置、上位置、横幅、縦幅の値を取得するコードです。
イメージコントロールを生成する際に以上の値を設定するのでここで取得しています。
注目すべきコード②
次に見て頂きたいのは30行目です。
'画像の数だけ処理を繰り返すFor文 For cnt = 1 To 10
コードの説明
以上のコードは、画像の数だけ処理を繰り返すFor文です。
今回は画像を10枚イメージコントロールに表示させたいので10回処理を繰り返します。
注目すべきコード③
次に見て頂きたいのは33行目です。
'画像ファイルのパスを取得する imgPath = ws.Range("B" & cnt + 8).Value
コードの説明
以上のコードは、画像ファイルのフルパスを取得して変数imgPathに格納しています。
注目すべきコード④
次に見て頂きたいのは36行目から42行目です。
'イメージコントロールを生成して画像を表示させる Set imgControl = ws.Shapes.AddPicture(Filename:=imgPath, _ LinkToFile:=msoTrue, _ SaveWithDocument:=msoTrue, _ Left:=imgLeft, _ Top:=imgTop, _ Width:=imgWidth, _ Height:=imgHeight)
コードの説明
以上のコードは、イメージコントロールを生成し、そのイメージコントロールに画像を表示させる処理のコードです。
Filename
Filenameプロパティには、イメージコントロールに表示させる画像のフルパスを指定します。
LinkToFile
LinkToFileプロパティには、msoTrue(画像へのリンクを保持するか)、msoFalse(画像をExcelファイルに埋め込むか)を指定します。
SaveWithDocument
SaveWithDocumentプロパティには、msoTrue(画像がExcelファイルと一緒に保存される)か、msoFalse(画像がExcelファイルと一緒に保存されない)かを指定します。
Left
Leftプロパティには、イメージコントロールの左位置の値を指定します。
Top
Topプロパティには、イメージコントロールの上位置の値を指定します。
Width
Widthプロパティには、イメージコントロールの横幅の値を指定します。
Height
Heightプロパティには、イメージコントロールの縦幅の値を指定します。
注目すべきコード⑤
次に見て頂きたいのは45行目です。
'イメージコントロールの位置を更新 imgLeft = imgLeft + imgWidth + 10
コードの説明
以上のコードは、次に表示させるイメージコントロールの左位置を設定しているコードです。
今回はイメージコントロールを横に並べて表示させるので、イメージコントロールが表示された後に、次に表示させるイメージコントロールの左位置を設定しています。
動作確認
「Excelファイルと画像ファイルの例」をご覧ください。
最後に
この記事では、画像ファイルの数だけimageコントロールを生成して画像を表示させる方法についてご説明しました。
画像ファイルの数だけimageコントロールを生成して画像を表示させたい場合は本記事を参考にして頂けたら幸いです。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。