画像サムネイルとハイパーリンクを設定
概要
- マクロを実行するとファイルピッカーで画像ファイルを選択
- シートに選択画像ファイルのハイパーリンクを設定
// Anchor : アンカーリンクを設定するセルを指定
// Address : ハイパーリンクのアドレス
// ScreenTip : ハイパーリンクをマウスポインタ―で指した場合に表示されるヒント
// TextToDisplay : ハイパーリンクで表示されるテキスト
ActiveSheet.Hyperlinks.Add _
Anchor:=ActiveSheet.Range(Cells(strow, stcol), Cells(strow, stcol)), _
Address:=tmpstr, _
ScreenTip:=tmpstr, _
TextToDisplay:=filename
- 画像ファイルのサムネイルを設定
- 横方向は最大4画像とし、4画像を超えたら改行
// i : 画像リストのインデックス
// stcol・strow : 画像を挿入するセルの列番号・行番号
// 横方向の左端画像なら2列目から表示
If (i Mod 4) = 0 Then
stcol = 2
strow = strow + 12
Else
// 横方向の左端ではないとき13セルづつ右にずらす
stcol = stcol + 13
End If
動作検証環境
Windows10 Pro/Windows11 Pro
Microsoft365 Excelバージョン2110
実行イメージ
- [開発] メニューを選択
- [マクロ] を選択
- マクロ画面で「画像をシートに並べて表示する」を選択
- [実行] 押下
- 確認メッセージボックスで[はい] 押下
ファイル選択ダイアログで画像ファイルを選択するとシートに画像を取り込みます
使い方
適当なところにソースを貼り付けてください。
横方向に4画像配置すると改行しますが下記の4を任意の数値に変更すると横方向の配置数が変更できます。
// 次の開始位置を算出(横方向は最大4画像とする)
If (i Mod 4) = 0 Then
マクロ「画像をシートに並べて表示する」を実行すると処理を開始します。
ソースコード
'/********************************************************
'/* 画像をシートに並べてハイパーリンクを設定する
'/* 1.画像ファイル(.jpg)を選択する(複数選択可)
'/* 2.画像ファイルのサムネイルをシートに並べる
'/* 3.画像ファイルへのハイパーリンクをシートに設定する
'/********************************************************
Public Sub 画像をシートに並べて表示する()
On Error GoTo ErrorOccurred
Dim gazoFiles() As String
Dim iret As Integer, i As Integer
Dim stcol As Integer, strow As Integer
Dim filename As String
'//ファイル選択ダイアログで画像ファイルを選択する
With Application.FileDialog(msoFileDialogFilePicker)
'選択可能ファイル(.jpg)設定
.Filters.Add "画像ファイル(Jpeg)", "*.jpg"
'複数ファイル選択可能
.AllowMultiSelect = True
'ファイルピッカー表示
If .Show = False Then
Exit Sub
Else
'SelectedItemsはインデックス1から開始するのでFor文で実装する際は注意
i = 0
For Each tmpstr In .SelectedItems
ReDim Preserve gazoFiles(i)
gazoFiles(i) = tmpstr
i = i + 1
Next
End If
End With
'//シートを初期化していいか確認メッセージを表示する
iret = MsgBox(ActiveSheet.Name & " : シートを初期化してもよろしいですか?", _
vbYesNo + vbQuestion, "画像をシートに並べて表示する")
If iret = vbNo Then Exit Sub
'//シートを初期化する
シートクリア ActiveSheet.Name
'//画像のサムネイルとハイパーリンクを設定
i = 1
stcol = 2
strow = 2
For Each tmpstr In gazoFiles
'ハイパーリンクを設定
'詳細はOfficeデベロッパーセンター参照
'https://docs.microsoft.com/ja-jp/office/vba/api/excel.hyperlinks.add
filename = Mid(tmpstr, InStrRev(tmpstr, "\") + 1)
Range(Cells(strow, stcol), Cells(strow, stcol)).Select
ActiveSheet.Hyperlinks.Add _
Anchor:=ActiveSheet.Range(Cells(strow, stcol), Cells(strow, stcol)), _
Address:=tmpstr, _
ScreenTip:=tmpstr, _
TextToDisplay:=filename
'サムネイル画像を設定
Range(Cells(strow + 1, stcol), Cells(strow + 1, stcol)).Select
ActiveSheet.Pictures.Insert(tmpstr).Select
Selection.ShapeRange.Height = 150
'次の開始位置を算出(横方向は最大4画像とする)
If (i Mod 4) = 0 Then
stcol = 2
strow = strow + 12
Else
stcol = stcol + 13
End If
'次の画像はi番目
i = i + 1
Next
Range("A1").Select
Exit Sub
ErrorOccurred:
MsgBox "何かエラーが発生しました", vbCritical
End Sub
'/********************************************************
'/ シートをクリアする
'/ stname:クリア対象シート名
'/********************************************************
Private Sub シートクリア(ByVal stname As String)
Dim sp As Variant
'//シート選択
ThisWorkbook.Sheets(stname).Activate
'//セルを初期化する
Cells.Select
Selection.UnMerge
Selection.Clear
Selection.ColumnWidth = 3
Selection.RowHeight = 17
Selection.Font.Name = "Meiryo UI"
Selection.Font.Size = 12
Selection.Borders.LineStyle = False
'//中央揃えを設定
Selection.HorizontalAlignment = xlLeft
Selection.VerticalAlignment = xlCenter
'//セルの折り返しを解除
Selection.WrapText = False
'//オートシェイプを削除する
For Each sp In ActiveSheet.Shapes
sp.Delete
Next
ActiveWindow.Zoom = 80
Range("A1").Select
End Sub