サムネイル画像をクリックすると拡大し、再度クリックするとサムネイルに戻るマクロです。
商品サンプルなどの画像を記載するリストで、リストとして見やすく画像の確認もできるようになります。
画像クリックで縮小・拡大を切り替えるマクロ
Sub 画像サムネイル拡大縮小()
Const maxH As Long = 400 '拡大時の高さ
Dim minH As Long '縮小時の高さ
Dim nameShp As String
On Error Resume Next
nameShp = Application.Caller
If Err.Number <> 0 Then Exit Sub
With ActiveSheet.Shapes(nameShp)
minH = .TopLeftCell.RowHeight - 5
.LockAspectRatio = True
If .Height > minH Then
.Height = minH
Else
.Height = maxH
.ZOrder msoBringToFront
End If
End With
End Sub
ポイント解説
各画像をマクロ実行ボタン化する
この仕組みでは、個々の画像にマクロを登録して実行ボタンとして機能させています。マクロの登録もVBAで処理できるので、画像が多い場合は別途マクロ化しましょう。
画像にマクロを登録するには、
OnAction
プロパティを使います。Shape
オブジェクト.OnAction
=
"
画像サムネイル拡大縮小"
登録したマクロは共通なので、どの画像がクリックされて呼び出されたかを調べて処理対象を特定する必要があります。マクロの呼び出し元は、Application.Caller
プロパティでたどることができます。
行の高さに収まるようにサムネイル化(TopLeftCellプロパティ)
このマクロでは、配置先の行の高さに応じてサムネイル時のサイズを算出しています。
もともと画像(Shapeオブジェクト)はセルに紐づいていないので、Excel編集画面ではセル位置などは確認できません。しかしVBAでは、TopLeftCell
プロパティで画像の左上端が位置するセルを特定できるのです。
画像の左上端が位置するセルの高さを求める
Shape
オブジェクト.TopLeftCell.RowHeight
拡大時に原寸で表示したい場合
このマクロでは、統一感を考慮して拡大時の高さ(maxH
)を 400ポイントとしています。Height
プロパティの代わりに ScaleHeight
プロパティを使えば、原寸で表示することもできます。
元のサイズを基準に100%(原寸)で表示する
Shape
オブジェクト.ScaleHeight
Factor:=1,
RelativeToOriginalSize:=True,
Scale:=msoScaleFromTopLeft
拡大時の画像が粗い(解像度が低い)場合
画像が縮小時の解像度のまま拡大されてしまう場合は、Excelによって画像が圧縮されていることが考えられます。オプションで画像の圧縮を無効にしてください。なお、この設定はブックファイルごとなので他のブックには影響しません。