画像ファイルを保存する方法

このQ&Aのポイント
  • VBAを使用して画像ファイルを保存する方法を教えてください。
  • 保存したい画像をVBAで挿入し、その画像ファイルを保存する方法について説明してください。
  • Exportメソッドがエラーになる場合、代替の方法で画像ファイルを保存する方法を教えてください。
回答を見る
  • ベストアンサー

画像ファイルを保存する方法

洗濯してる画像を保存するvbaコードが知りたいのですが Sub Sample() Dim PicFile As String Dim myRess As Variant PicFile = "C:\Users\test.jpg" ActiveSheet.Pictures.Insert PicFile ActiveSheet.Pictures.Insert(PicFile).Select PicFile = Selection.Name myRess = ActiveSheet.Shapes(PicFile).Picture.Export( _ ThisWorkbook.Path & "\test.jpg", "JPG", False) End Sub だと実行時エラー438になります。 Export メソッドは、グラフにしか使えないのでしょうか? 画像ファイルを保存する方法をご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#2です。おそらくお望みのものではないと存じますが、コードのストックの使い回しをしたため冗長でしたので、アレンジしました。一応投稿させていただきます。 Sub ExtractImage2() Dim objShell As Object Dim objFolder As Object Dim objDestination As Object Dim vZipFile As String, vDestination As Variant Dim getDesktopPath As String Const ssfDESKTOP = 0 Set objShell = CreateObject("Shell.Application") getDesktopPath = objShell.Namespace(ssfDESKTOP).Self.Path 'ThisWorkbookを別名で保存し、拡張子をZipにRenameして画像ファイルを取り出す ThisWorkbook.SaveCopyAs getDesktopPath & "\temp.xlsm" If Dir(getDesktopPath & "\temp.zip") <> "" Then Kill getDesktopPath & "\temp.zip" Name getDesktopPath & "\temp.xlsm" As getDesktopPath & "\temp.zip" vZipFile = getDesktopPath & "\temp.zip" vDestination = getDesktopPath & "\tempDir" If Dir(vDestination, vbDirectory) = "" Then MkDir vDestination End If Set objFolder = objShell.Namespace(vZipFile & "\xl\media") If objFolder Is Nothing Then MsgBox "画像がありません" Exit Sub End If 'vDestinationのところは、ssfDESKTOPの様な定数を渡す場合もあるので文字列型だとエラーになるらしい Set objDestination = objShell.Namespace(vDestination) '丸ごと取り出す objDestination.CopyHere objFolder.items Set objShell = Nothing End Sub

JAWFYJMKNPO
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

下記リンク先のKenKenSPさんのコードは、クリップボードのデータのCF_BITMAPを使っているので、画像ファイルにも通用します。(サンプルコード中、C:\ドライブ直下のファイルアクセスは、WindowsVISTA以降はエラーになりますので、要注意)小生の回答は,CF_ENHMETAFILEを使っているので駄目かもしれませn。 http://okwave.jp/qa/q5124395.html さて、xl2007以降では、エクセルのxlsxやxlsmのファイルは実はZip圧縮フォルダーであり、内部に保存されている画像ファイルを取り出す事ができます。全ての画像になってしまいますが、取り出すコードを書いて(切り貼りして)みました。 ご参考まで。Windows7Home-64bit, xl2010-32bitで試しています。 Sub ExtractImage() Dim fso As Object Dim objShell As Object Dim objFile As Object Dim objDestination As Object Dim vZipFile, vDestination Dim myFile As Object 'ThisWorkbookを別名で保存し、拡張子をZipにRenameして画像ファイルを取り出す ThisWorkbook.SaveCopyAs GetDesktopPath & "\temp.xlsm" If Dir(GetDesktopPath & "\temp.zip") <> "" Then Kill GetDesktopPath & "\temp.zip" Name GetDesktopPath & "\temp.xlsm" As GetDesktopPath & "\temp.zip" vZipFile = GetDesktopPath & "\temp.zip" vDestination = GetDesktopPath & "\tempDir" ' ファイルシステムオブジェクトおよびシェルオブジェクト作成 Set fso = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("Shell.Application") ' 展開先パスがなければ作成する If Dir(vDestination, vbDirectory) = "" Then MkDir vDestination End If ' Zipファイルオブジェクト作成(画像ファイルは\xl\media\にある Set objFile = objShell.Namespace(vZipFile & "\xl\media") ' 展開先オブジェクト作成 Set objDestination = objShell.Namespace(vDestination) ' 展開 'objDestination.CopyHere objFile.Items '丸ごと取り出す時 For Each myFile In objFile.Items Select Case LCase(fso.GetExtensionName(myFile.Name)) 'とりあえずJpegだけテストした Case "jpg" objDestination.copyhere myFile End Select Next myFile 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 なお、画像ファイルとワークシートの対照と、リンク等について調べた事があります。真面目にやれば特定シートからの取り出しも可能とは思います。 http://okwave.jp/qa/q7320070.html

JAWFYJMKNPO
質問者

お礼

ありがとうございました。

  • yomyom01
  • ベストアンサー率12% (197/1596)
回答No.1

>洗濯してる画像 笑った

JAWFYJMKNPO
質問者

お礼

ありがとうございました。

関連するQ&A

  • VBAでwebの画像を名前を付けて保存する方法

    下記でエクセルのシートには保存はできましたが直接画像をjpegでファイルとして保存するにはどうすれば良いでしょうか? マクロの記録では無理でした・・・ どなたかご存知の方よろしくお願いいたします。 Sub test() Dim IMG As Variant Dim wbooks As Workbook Dim Filename As String Set wbooks = Workbooks.Add Filename = "C:\テスト\" & Format(Date - 1, "yyyymmdd") & ".xlsx" wbooks.SaveAs (Filename) IMG = "http://t-success.co.jp/image.jpg" With ActiveSheet.Pictures.Insert(IMG) .Top = Range("A1").Top .Left = Range("A1").Left End With wbooks.Save End Sub

  • VBAで画像を自動で切り替える方法

    Excelで棚割表を作っています。商品コードを打つとその商品の画像を自動で表示させたいのですが、雑誌を見ながらコードをアレンジしてほぼ完成したのですが、「プロシージャーが大きい」とエラーが出てマクロを実行出来ません。 画像は100個程度あり、先に別のマクロで貼り付けてあります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ファイル As String If Intersect(Target, Range("A4")) Is Nothing Then ActiveSheet.Shapes("画像").Delete ファイル = "C:\保存場所\" & Range("A4").Value & ".jpg" Range("B5").Select ActiveSheet.Pictures.Insert(ファイル).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像" End If (中略) Dim ファイル98 As String If Intersect(Target, Range("U60")) Is Nothing Then Exit Sub ActiveSheet.Shapes("画像98").Delete ファイル98 = "C:\保存場所\" & Range("U60").Value & ".jpg" Range("V61").Select ActiveSheet.Pictures.Insert(ファイル98).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像98" End Sub 省ける箇所や分割する方法などありましたら教えてください。

  • Shape画像保存モードの事後変更

    VBA Excel2007を使用しています。 画像を読み込むために、例えば、 Dim picture As Shape Set picture = ActiveSheet.Shapes.AddPicture(filename:=filename, LinkToFile:=msoTrue, SaveWithDocument:=msoFalse, Left:=Selection.Left, Top:=Selection.Top, Width:=0, Height:=0) のように、一旦、画像を「文書とともに保存しない」モードで読込み、後にそのShape画像を「文書とともに保存する」ように変更することは、可能でしょうか。

  • マクロでセルに入れたファイル名の画像を隣のセルに読

    みこむ。 マクロで「セルに入れたファイル名の画像を隣のセルに読み込む」作業をVBA でつくりました。 そのファイル名がないときは、飛ばすようにできないでしょうか。 「 Set myPic = ActiveSheet.Pictures.Insert(sCurDir & myCell.Value & ".JPG")」 ここでとめられてしまいます。    A(No)  B(名)    C(画像) --------------------------------------------- 1   1   test01   D:\画像\teet01.JPG 2   2   test02   D:\画像\teet02.JPG 3   3   test03   D:\画像\teet03.JPG Private Sub CommandButton1_Click() Dim i As Long Dim myPic As Object Dim myCell As Range Dim sCurDir As String sCurDir = ThisWorkbook.Path & "\画像\" For i = 6 To Range("B" & ActiveSheet.Rows.Count).End(xlUp).Row Step 6 Set myCell = Range("B" & i) Set myPic = ActiveSheet.Pictures.Insert(sCurDir & myCell.Value & ".JPG") With myPic .Left = Range("C" & i).Left .Top = Range("C" & i).Top .Width = Range("C" & i).MergeArea.Width .Height = Range("C" & i).MergeArea.Height End With Set myPic = Nothing Next i End Sub

  • エクセルの画像リンク解除

    Pictures.Insert で書かれた内容を Shapes.AddPicture の構文に変更したいのですが、 VBAの知識が乏しいので、なかなかうまくいきません。 どなたかわかる方はいらっしゃいますでしょうか? 宜しくお願いします。 Sub Test() Range("B3").Select Dim fName, pict As Picture fName = Application.GetOpenFilename("JPG, *.jpg", MultiSelect:=True) If IsArray(fName) Then For i = 1 To UBound(fName) Set pict = ActiveSheet.Pictures.Insert(fName(i)) pict.TopLeftCell = ActiveCell pict.Width = ActiveCell.Width * 2 pict.Height = ActiveCell.Height * 6 ActiveCell.Offset(7, 0).Activate Next i End If End Sub

  • 写真を縦に取り込むには?

    質問1 写真を縦に取り込むには以下マクロをどのように変えたらよいのか? を教えてください。 質問2 JPGとjpgを取り込むにはどうしたらよいのでしょうか? Sub test01() ListUp_FileList ("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures") End Sub Sub ListUp_FileList(FolderSpec) Dim File_Collection As Object Dim File_List As Variant Dim cnt As Integer Set File_Collection = CreateObject("Scripting.FileSystemObject") _ .GetFolder(FolderSpec).Files cnt = 1 l = 10 For Each File_List In File_Collection If Right(File_List, 4) = ".jpg" Then 'Range("A" & Format(cnt)) = File_List.Name ActiveSheet.Pictures.Insert(FolderSpec & "\" & File_List.Name).Select Selection.ShapeRange.Left = l + (cnt - 1) * 150 Selection.ShapeRange.Width = 130 Selection.ShapeRange.Height = 104 Selection.ShapeRange.Top = 360 cnt = cnt + 1 End If Next End Sub

  • エクセルマクロ 画像を所定の位置に貼り付けるには?

    エクセル上でボタンを押すと写真データーを所定の位置に貼り付ける 書式(excel2003で作成)を使っています。 excel2010になってから、皆さんが質問されているようにリンク張付になってしまい 保存していた書類から写真が消えてしまいました。 今は作成したらPDFで保存していますが、修正ができません。 そこで、ネットでいろいろ検索して、マクロをいじっているのですが、 コピー→削除→ペースト(セルの位置)まではなんとかできたのですが 指定した位置に貼り付ける方法が分かりません。 よろしくお願いします。 修正中のマクロが下記です。 Sub select_pic() Dim tt, ttl, Item As String Dim FileNamePath As Variant 'ファイルのパスを取得します tt = "写真 ファイル (*.jpg),*.jpg" ttl = "写真ファイルを選択してください" FileNamePath = SelectFileNamePath(tt, ttl) If FileNamePath = False Then 'キャンセルボタンが押された  End End If ActiveSheet.Pictures.Insert(FileNamePath).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Width = 263 Selection.ShapeRange.Left = 12 Selection.ShapeRange.Top = 45 Selection.CopyPicture Selection.Delete ActiveSheet.Paste End Sub  最後のPasteの前後に座標を入れればいいのだと思いますが エラーが出てだめです。分かる人にとっては簡単なのでしょうが よろしくお願いします。

  • VB6 エクセルに画像貼り付け

    お世話になります。 VB6でエクセルのセルを数値で指定して、そこに画像を読み込んで実態を張り付けたいのですが、 色々調べて ActiveSheet.Pictures.Insertと ActiveSheet.Shapes.AddPictureを試してみましたが ActiveSheet.Shapes.AddPicture( FileNameTmp, False, True, 10, 20, 0, 0) AddPictureはもしかしてVB6には対応していないのでしょうか? 構文エラーになってしまいます。 ActiveSheet.Pictures.Insert(FileNameTmp).Select Insertだと画像がリンクになってしまいます。

  • Excel VBA マクロ 画像(図)貼り付け

    Excel2010にて、 VBA マクロ 画像(図)貼り付けを行いたいと思っています。 しかし、マクロを自動登録すると、ActiveSheet.Pictures.Paste.Selectになり、AddPicture ができません。 下記のマクロをAddPictureへ変換したいのですが、そのまま、InsertをAddpictureに変更してもエラーになってしまいます。 いい方法を教えてください(ToT)/~~~。 どうぞよろしくお願いします。 Sub Test() ' ' Test Macro ' Rows("4:4").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.RowHeight = 150# Range("C4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileC.gif"").Select ActiveSheet.Pictures.Paste.Select Range("D4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileD.gif"").Select Selection.Cut Range("D4").Select ActiveSheet.Pictures.Paste.Select Range("E4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileE.gif"").Select Range("E4").Select ActiveSheet.Pictures.Paste.Select Range("F4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileE.gif"").Select ActiveSheet.Pictures.Paste.Select Range("G4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileG.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("H4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileH.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("I3").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileI.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("J4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileJ.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("K3").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileK.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("L3").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileL.gif"").Select ActiveSheet.Pictures.Paste.Select Range("M4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileM.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("N4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileN.gif").Select Selection.Cut ActiveSheet.Pictures.Paste.Select End Sub

  • 画像をアクティブセルの左上隅に配置し任意のセルに

    画像をアクティブセルの左上隅に配置し任意のセルにその画像ファイル名を自動で入力したいです やりたいことは以下になります 例えば画像をアクティブセル(D2)の左上隅に貼り付けて 貼り付けた画像のファイル名をC2に自動で入力をしたいです ファイル名に関しては拡張子も明記するコードとしないコード二つご教授して頂けると大変嬉しいです 下記のコード二つを組み合わせればできそうなんですが どのようにしたらいいのか分かりません よろしくお願いします Sub 図形挿入() Dim FilePath As Variant FilePath = Application.GetOpenFilename(",*.png") If Not FilePath = False Then ActiveSheet.Pictures.Insert(FilePath).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Width = Selection.ShapeRange.Width * 1# Selection.ShapeRange.Left = ActiveCell.Left + 2.25 Selection.ShapeRange.Top = ActiveCell.Top + 2.25 With Selection.ShapeRange.Line .Weight = 2.25 '線の太さを2.25に .ForeColor.RGB = RGB(255, 0, 0) '赤枠に End With End If End Sub Sub ファイル名をセルに入力() Dim OpenFileName As String Dim tmp As Variant OpenFileName = Application.GetOpenFilename(FileFilter:="画像 ,*.png; *.jpg; *.gif; *.bmp", Title:="ファイルの選択") If OpenFileName <> "False" Then tmp = Split(OpenFileName, "\") Range("C2").Value = tmp(UBound(tmp)) End If End Sub

専門家に質問してみよう