【Excel VBA】外部ツールを使わず画像ファイル形式を変換する方法

スポンサーリンク

外部ツールを使わずにExcel VBAで画像ファイルの形式を変換する方法を説明していきます。

画像形式を変換するコード

画像形式を変換するコードです。画像サイズを指定することで、画像のリサイズも可能です。

対応形式は「PNG,JPEG,GIF,TIFF,SVG」です。

''' <summary>
''' 画像ファイル形式を変換する
''' </summary>
''' <param name="inPath">”参照先パス(必須)</param>
''' <param name="outPath"出力先パス(必須)</param>
''' <param name="imgWidth">画像の幅</param>
''' <param name="imgHeight">画像の高さ</param>
''' <param name="tmpSh">図形の出力先シート</param>
''' <remarks></remarks>
Sub ImgFileConv(ByVal inPath As String, ByVal outPath As String, Optional ByVal imgWidth As Long = -1, Optional ByVal imgHeight As Long = -1, Optional ByRef tmpSh As Worksheet)
    '画像を図形に変換する
    If tmpSh Is Nothing Then Set tmpSh = ActiveSheet
    Dim shp As Shape: Set shp = tmpSh.Shapes.AddPicture(inPath, msoFalse, msoTrue, 1, 1, imgWidth, imgHeight)
    '図形を画像形式で保存する
    Dim cht
    Set cht = tmpSh.ChartObjects.Add(0, 0, shp.Width, shp.Height)
    With cht
         Dim retryCount As Integer: retryCount = 100
         On Error GoTo CopyRetry
         shp.CopyPicture Format:=xlBitmap
         On Error GoTo 0
        .Chart.Parent.Select
        .Chart.Paste
        .Chart.Export outPath
        .Delete
    End With
    '図形を削除
    shp.Delete
    Exit Sub
CopyRetry:
    '一定時間待機後、図形コピーをリトライする
    retryCount = retryCount - 1
    If retryCount < 1 Then
        On Error GoTo 0
    End If
    Application.Wait [Now()] + 100 / 86400000
    DoEvents
    Resume
End Sub

使用例

Excelファイル直下の「test.png」を、「640*480」にリサイズした状態でJPEG形式に変換するコードです。

Private Sub Sample()
    Call ImgFileConv(ThisWorkbook.Path & "\test.png", ThisWorkbook.Path & "\test.jpg", 640, 480)
End Sub
タイトルとURLをコピーしました