- ベストアンサー
vbaで画像ファイルを開き、サイズを変更して保存
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ペイントは使わない方法です。 1.Chartのエクスポート機能を利用する方法です。圧縮率は指定できません。(レジストリをいじれば可能かも) 下記コードでは、長辺を300にして、短辺は元画像の比率に合わせています。 Sub resizePicture() Dim myWidth As Double, myHeight As Double Dim picPath As String Dim myPic As StdPicture Dim myRatio As Double Dim myChartObj As ChartObject Const longSideLength As Double = 300 Application.ScreenUpdating = False picPath = Application.GetOpenFilename("画像ファイル , *.*") If picPath = "False" Then Exit Sub Set myPic = LoadPicture(picPath) myRatio = myPic.Width / myPic.Height Set myPic = Nothing If myRatio >= 1 Then myWidth = longSideLength: myHeight = longSideLength / myRatio Else myWidth = longSideLength * myRatio: myHeight = longSideLength End If 'Sheet(2)のところはアクティブでないシートを指定して下さい。 '作業用のChartObjectを生成して、用済み後は削除します。 Set myChartObj = Sheets(2).ChartObjects.Add(0, 0, myWidth, myHeight) myChartObj.Chart.ChartArea.Fill.UserPicture PictureFile:=picPath myChartObj.Chart.Export GetDesktopPath & "\" & "test.jpg" myChartObj.Delete Application.ScreenUpdating = True End Sub '動作確認のため便宜上デスクトップに保存している。 Private Function GetDesktopPath() As String Dim wScriptHost As Object, strInitDir As String Set wScriptHost = CreateObject("Wscript.Shell") GetDesktopPath = wScriptHost.SpecialFolders("Desktop") Set wScriptHost = Nothing End Function 2.圧縮率の指定できる、コードが長~い方法です。近頃のWindowsなら標準で備えているGDI+という機能を用いています。 http://okwave.jp/qa/q5647625.html 以上、ご参考まで。
お礼
ありがとうございます。