もともと添付されている画像は何もせず、図の挿入で追加した画像のみ、pngからjpg形式に変換。また、リサイズしてExcelに貼り付けたいです。
もともと貼ってある図まで切り取りされ、jpgに変換されてしまうのですが、どこを変更したらよいでしょうか?
Sub resize()
Application.Dialogs.Item(xlDialogInsertPicture).Show
With Selection
.ShapeRange.LockAspectRatio = msoFalse
.ShapeRange.Height = 100
.ShapeRange.Width = 300
Dim sp As Shape
Dim l As Double
Dim t As Double
For Each sp In ActiveSheet.Shapes
If sp.Type = msoPicture Then
l = sp.Left
t = sp.Top
sp.Select
Selection.Cut
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
.Left = l
.Top = t
End With
End If
Next
End With
End Sub
No.6ベストアンサー
- 回答日時:
複数選択可能にしました。
Sub resize()
Dim fName As Variant
Dim png As Variant
fName = Application.GetOpenFilename("pngファイル, *.png", MultiSelect:=True)
If IsArray(fName) Then
For Each png In fName
With ActiveSheet.Pictures.Insert(png)
.TopLeftCell = ActiveCell
.ShapeRange.LockAspectRatio = msoFalse
.ShapeRange.Height = 100
.ShapeRange.Width = 300
.Cut
End With
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
ActiveCell.Offset(2, 0).Activate
Next png
End If
End Sub
No.5
- 回答日時:
これでどうですか?
Sub resize()
Dim fName As String
Dim aRng As Range
Set aRng = ActiveCell
fName = Application.GetOpenFilename("pngファイル, *.png")
If fName <> "False" Then
With ActiveSheet.Pictures.Insert(fName)
.TopLeftCell = aRng
.ShapeRange.LockAspectRatio = msoFalse
.ShapeRange.Height = 100
.ShapeRange.Width = 300
.Cut
End With
aRng.Select
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
ActiveCell.Offset(2, 0).Activate
End If
End Sub
ただ、これでは元のpng画像が消えない?と思うので、その場合は、
.Cut
の下に、以下のように2行追加してください。
.Cut
.CopyPicture 'クリップボードにコピー
.Delete '画像をいったん削除
End With
ご回答ありがとうございました。
ファイル1枚の場合、.Cutの下に2行を追加しなくても成功しました。
ただし
1.ファイルを選択することが1枚しかできません。
複数枚pngファイルを選択したいです。
2. ファイルを1枚選択した場合で、.Cutの下2行追加しましたが、.CopyPictureのところで、PictureクラスのCopy Pictureメソッドが失敗しましたと、エラーがでます。
No.4
- 回答日時:
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
この行の下に
ActiveCell.Offset(20, 0).Activate
を追加したらどうですか?
ご回答ありがとうございます。
申し訳ありませんが、
Sub resize()
Application.Dialogs.Item(xlDialogInsertPicture).Show
With Selection
.ShapeRange.LockAspectRatio = msoFalse
.ShapeRange.Height = 100
.ShapeRange.Width = 300
.Cut
End With
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
ActiveCell.Offset(20,0).Activate
End Sub
でも、
Sub resize()
yy=1
Application.Dialogs.Item(xlDialogInsertPicture).Show
With Selection
.ShapeRange.LockAspectRatio = msoFalse
.ShapeRange.Height = 100
.ShapeRange.Width = 300
.Cut
End With
Range("A" &yy).Select
With Selection
yy=yy+10
End With
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
End Sub
こちらでも、できませんでした。
どこを修正したらよいでしょうか?
No.3
- 回答日時:
画像は、現在選択しているセルに貼り付けられるので
選択されているセルを移動させてやればよいです。
勝手に移動させるなら、以下のようにすれば良いと思います。
Dim yy = 1
Sub resize()
Application.Dialogs.Item(xlDialogInsertPicture).Show
Range("A" & yy).Select
With Selection
yy = yy + 10
End Sub
ご回答ありがとうございます。
何度も申し訳ありませんが、今回答いただいたものと組み合わせしてもうまくいきません。
お手数ですが、1枚毎バラバラに貼り付けでき、リサイズと、pngからjpgへ変換もできる組み合わせで回答いただけると助かります。
本当に何度も申し訳ありませんが、ご回答の程よろしくお願い致します。
No.2
- 回答日時:
これでよいかはわかりませんが、必要なのはこのくらいだと思います。
Sub resize()
Application.Dialogs.Item(xlDialogInsertPicture).Show
With Selection
.ShapeRange.LockAspectRatio = msoFalse
.ShapeRange.Height = 100
.ShapeRange.Width = 300
.Cut
End With
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
End Sub
ありがとうございます。
1枚の画像には有効でした。
複数枚を取り込むと、複数枚が1つの画像になってしまうようです。
1枚1枚バラバラに貼り付けする方法があれば教えていただけると助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アップロード画像数でCSSを分け...
-
どの画像がクリックされたかフ...
-
★PHP★画像アップロードの際に余...
-
透過PNGが透過されない!!
-
C# Excelファイルへの画像挿入。
-
Illustratorで文字と画像を流し...
-
GDI+を使ったビット数とDPIの扱い
-
PHPで半透明画像を作りたい
-
imageフォルダに、画像をリサイ...
-
PostgreSQLのラージオブジェク...
-
VBSの「MsgBox」について
-
VBAでJPGサイズ変更
-
pictureboxに表示した画像のフ...
-
画像が存在しない時の 「×」 表...
-
pythonのファイル内に 手書き数...
-
PythonのTkinter詳しい方へ。画...
-
ビットマップ画像を読み込むプ...
-
C#とJavaで、MP3タグの画像を表...
-
こちらはただの直列処理ですか?
-
onedrive にexcelファイルをア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
拡張子php画像をjpg画像等に変...
-
透過PNGが透過されない!!
-
アップロード画像数でCSSを分け...
-
imageフォルダに、画像をリサイ...
-
VBAでJPGサイズ変更
-
Illustratorで文字と画像を流し...
-
VBAのコードを教えてください
-
C# Excelファイルへの画像挿入。
-
php,mysqlにて画像パス保存/表...
-
GDI+を使ったビット数とDPIの扱い
-
SQLiteに画像を格納したい
-
ListViewコントロールでサムネ...
-
★PHP?★画像を縦横比を変えずに...
-
ビットマップ画像を読み込むプ...
-
phpで画像がどうしても文字化け...
-
PHPで吐き出した画像にリンクを...
-
phpMyAdminに画像を保存できない
-
OpenGLで描いて画像ファイル出力
-
手作業で埋め込んだ、UserForm1...
おすすめ情報