はじめに

フォルダ内にある画像の一覧をイメージ付きで表示するサンプルです。
画像の大きさは1つのセルの高さに応じて拡縮されます。
画像はリンクで貼り付けますので、Excelファイルのサイズはあまり大きくなりません。
プログラムソースを参考にして頂き、ご自身のプログラムに活かしてみてください。
使い方
1.画像表示させたいフォルダを「フォルダ選択」ボタンで選択します。
B2セルにパスが表示されます。
2.A5セルの高さを基準にして表示しますので、適当な高さに広げます。
A5より下の行は、A5の高さに調整されます。
3.「画像セット」ボタンを押すと、A列に画像が表示され、B列にファイル名が表示されます。
4.A5セルの高さを変更して「画像セット」ボタンを押すと、画像サイズが変更されて再表示されます。
5.「リストを削除」ボタンで、5行目以降の A列 と B列の値が削除されます。
プログラム解説
本プログラムは、全て標準モジュールに記述します。
画像フォルダ名をセット
「フォルダ選択」ボタンで呼び出されるプログラムです。フォルダ選択ダイアログを出して、結果をB2セルに代入しています。
'画像フォルダ名をセット
Sub setImageFolder()
'フォルダ選択ダイログ
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダの選択"
.InitialFileName = ThisWorkbook.Path '初期パスを設定
If Not .Show Then Exit Sub 'ダイアログを表示 キャンセルならば終了
ActiveSheet.Range("B2") = .SelectedItems(1)
End With
End Sub
画像ファイルか判断する
引数で与えられたファイル名が画像ファイルであればTrueを返し、そうでなければFalseを返します。
この関数で、リストに加えるかどうか判断します。
'画像ファイルか判断する
Function IsImageFile(ByVal filename As String) As Boolean
Dim b As Boolean
Dim pos As Long
b = True
pos = InStrRev(filename, ".")
If pos > 0 Then
Select Case LCase(Mid(filename, pos + 1)) 'LCase;アルファベットの大文字を小文字に変換
Case "jpeg"
Case "jpg"
Case "gif"
Case "png"
Case "bmp"
Case "tif"
Case "tiff"
Case Else
b = False
End Select
Else
b = False
End If
IsImageFile = b
End Function
全ての画像とファイル名を削除
「リストを削除」ボタンで呼び出される関数です。
最初に全てのシェイプを巡り、リンク画像であれば削除していきます。
次に、ファイル名部分をクリアし、最後に6行目以降のセルの高さを標準サイズに変更しています。
'全ての画像とファイル名を削除
Sub DeleteAllPictureItems()
Dim ws As Worksheet
Dim mShape As Shape
Dim r As Long
Application.ScreenUpdating = False
Set ws = ActiveSheet
'それまでの画像をクリア
For Each mShape In ws.Shapes
If mShape.Type = msoLinkedPicture Then '「リンク画像」を削除する
'If mShape.Type = msoPicture Then '「画像」を削除する
mShape.Delete
End If
Next
'ファイル名クリア
r = ws.Cells(Rows.Count, "B").End(xlUp).row
If r > 5 Then
ws.Range(ws.Cells(5, "B"), Cells(r, "B")).ClearContents
End If
'高さを標準に戻す
ws.Range("A6:A" & r).RowHeight = ActiveSheet.StandardHeight
Application.ScreenUpdating = True
End Sub
画像とファイル名を貼り付ける
「画像セット」ボタンで呼び出される関数です。
まず、それまでの値が残っていればクリアしておきます。
次に、B2セルのフォルダ名を取得して、フォルダ内のファイルを循環する処理を行います。
Do Until の部分でフォルダ内のファイルを巡回し、画像ファイルであるかを確認してから、リンク画像として貼り付けていきます。この時、ファイル名はB列に書き込みます。
貼り付ける際は、A5セルの高さを標準にして貼り付けていきます。
'画像とファイル名を貼り付ける
Sub setPictureList()
Dim ws As Worksheet
Dim base_path As String
Dim file_name As String
Dim file_path As String
Dim i As Integer
Dim mShape As Shape
Dim r As Long
Dim h As Integer
Application.ScreenUpdating = False
Set ws = ActiveSheet
'それまでの画像をクリア
For Each mShape In ws.Shapes
If mShape.Type = msoLinkedPicture Then '「リンク画像」を削除する
'If mShape.Type = msoPicture Then '「画像」を削除する
mShape.Delete
End If
Next
'ファイル名クリア
r = ws.Cells(Rows.Count, "B").End(xlUp).row
If r > 5 Then
ws.Range(ws.Cells(5, "B"), Cells(r, "B")).ClearContents
End If
base_path = ws.Range("B2") & "\"
file_name = Dir(base_path, vbNormal)
file_path = base_path & file_name
h = ws.Range("A5").RowHeight
i = 1
Do Until file_name = ""
If IsImageFile(file_name) Then
'シェイプタイプをリンク画像(msoLinkedPicture)として貼り付ける方法
ws.Rows(i + 4).RowHeight = h
ws.Cells(i + 4, 1).Select
ws.Pictures.Insert(file_path).Select
Selection.ShapeRange.height = h
'ファイル名表示
ws.Cells(i + 4, 2) = file_name
End If
file_name = Dir()
file_path = base_path & file_name
i = i + 1
Loop
ws.Range("B5").Select
Application.ScreenUpdating = True
End Sub
最後に
フォルダ内のファイル名一覧を取得するようなサンプルは、たくさんありますが、これを元に画像を表示させるようなものは見かけないので作ってみました。
やってみると、Excelでは画像の高さや幅をセルに合わせるという事が簡単にできるので便利です。
参考にしてみてください。
コメント