【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をコピーしました