カタログに最適! 画像のサムネイル化と再拡大

サムネイル画像をクリックすると拡大し、再度クリックするとサムネイルに戻るマクロです。

商品サンプルなどの画像を記載するリストで、リストとして見やすく画像の確認もできるようになります。

サムネイル

画像クリックで縮小・拡大を切り替えるマクロ

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によって画像が圧縮されていることが考えられます。オプションで画像の圧縮を無効にしてください。なお、この設定はブックファイルごとなので他のブックには影響しません。

タイトルとURLをコピーしました