
ご覧いただきありがとうございます。
VBA初心者です。
この度、写真の貼付を自動化したく、
インターネットで見つけたコードを使ってみたのですが
セルの大きさに合わせて写真の縦横比が変わってしまいます。
このコードを、縦横比を変えずに、セルの大きさに合わせて貼付するためには
(イメージを画像で載せております)
その部分を修正すればよいでしょうか?
ご教授のほどよろしくお願いいたします。
ーーーーーーー以下コードーーーーーーーー
Sub 写真貼付1name() 'ファイル名付き
'ファイル読み出し用変数
Dim filename As Variant
'写真読み込み用変数
Dim pic As Shape
'ファイルを纏めて読み込む
filename = Application.GetOpenFilename("JPG,*.jpg", MultiSelect:=True)
'filenameの配列か確認
If IsArray(filename) Then
'ファイル選択数分繰り返す
For i = 1 To UBound(filename)
'オブシェクト名を省略
With ActiveCell
'写真のサイズをセルの大きさに合わせて貼付け
Set pic = ActiveSheet.Shapes.AddPicture(filename:=filename(i), linktofile:=False, savewithdocument:=True, _
Left:=.Left + 2, Top:=.Top + 2, Width:=.MergeArea.Width - 4, Height:=.MergeArea.Height - 4)
End With
'セルの貼り付け位置を設定
ActiveCell.Offset(3, 0).Activate
Next i
End If
End Sub

No.2ベストアンサー
- 回答日時:
こんにちは
セルサイズにピッタリ合わせるのではなく、周囲に2pt分の隙間を作りたいということと解釈しました。
LockAspectRatio = True
で、画像は縦横比を維持するようになりますので、セルサイズと縦・横の小さな方に合わせて縮小・拡大し、その上で位置をセルと中央合わせに表示すればよさそうですね。
Sub 写真貼付1name()
Dim filename As Variant
Dim pic As Shape
Dim rng As Range, i As Long
filename = Application.GetOpenFilename("JPG,*.jpg", MultiSelect:=True)
If Not IsArray(filename) Then Exit Sub
Set rng = ActiveCell.MergeArea
For i = 1 To UBound(filename)
Set pic = ActiveSheet.Shapes.AddPicture(filename:=filename(i), _
linktofile:=False, savewithdocument:=True, _
Left:=rng.Left, Top:=rng.Top, Width:=-1, Height:=-1)
pic.LockAspectRatio = True
pic.Width = rng.Width - 2
If pic.Height > rng.Height - 2 Then pic.Height = rng.Height - 2
pic.Top = rng.Top + (rng.Height - pic.Height) / 2
pic.Left = rng.Left + (rng.Width - pic.Width) / 2
Set rng = rng.Offset(3).MergeArea
Next i
End Sub
No.5
- 回答日時:
No4です。
補足を見ましたが、それって画像が回転しているのではありませんか?
回転画像の場合、実際の縦・横の長さと、見た目の縦・横の長さが逆転しますので・・
回転画像にも対応するのなら、以下をご参照ください。
https://oshiete.goo.ne.jp/qa/13123440.html
No.4
- 回答日時:
No3です。
>縦が結合セルの幅より少し上下にはみ出てしまうのですが、
>画像をセルの縦幅に収まるようにするにはどうしたら良いでしょうか?
当方の環境で試した限りではおさまりますけれどね・・・
ロジック的にもはみ出ることはないはずなんですけれど。
当方では事象が再現しないので何ともわかりかねますが、どのような環境下でどのように実行しているのかにもよります。
再現できる状態で、サイズの計算途中の値がどうなっているかなどをチェックしてみないとわかりませんね。
見た目にわかりやすくするなら、
>pic.Width = rng.Width - 2
>If pic.Height > rng.Height - 2 Then pic.Height = rng.Height - 2
部分を、
pic.Width = rng.Width
If pic.Height > rng.Height Then pic.Height = rng.Height
としておけば、セルサイズにぴったりとなるはずですけれど、これでもはみ出すのでしょうか?
もしそうなら、画像サイズかセルサイズのどちらかを正しく取得できていないことになりますけれど・・
一方で、画像の表示位置がセルと中央合わせになっているのであれば、正しく取得できていることになるのですけれど、位置もずれているのでしょうか?
No.3
- 回答日時:
No2です。
すみません。計算を間違えてました。
2ptの隙間なら両側で4ptでしたね。
>rng.Width - 2
等、何か所か間違えがありますので、修正しておいてください。
正: rng.Width - 4 ですね。(おはずかしい・・)
回答ありがとうございます!
書いていただいたコードで試してみたところ、
縦が結合セルの幅より少し上下にはみ出てしまうのですが、
画像をセルの縦幅に収まるようにするにはどうしたら良いでしょうか?
VBAに関して無知のため、変な質問をしてしまっていたらすみません、、
他に必要な情報等あればおっしゃってください。
何度も申し訳ございませんが、よろしくお願いいたします。
No.1
- 回答日時:
Width:=.MergeArea.Width - 4, Height:=.MergeArea.Height - 4
この部分がサイズを変更しているので、Bookをコピーしてから上記を削除し実行してみるとか?
ただセルの結合については参考サイトのコードなのか目的のコードなのかによっては、上記を削除ではないかも知れませんけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル(2013)VBA-図の縦横比を変えずにセルにおさまる最大限の大きさにする
Excel(エクセル)
-
【VBA】写真の貼り付けコードがうまく機能しません。
Visual Basic(VBA)
-
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
-
4
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
5
エクセル 画像のプロパティで縦横比を固定する。 これをVBAでコードにできますか? 知ってる方おられ
Visual Basic(VBA)
-
6
エクセルVBAで縦向きの画像の挿入・回転
Excel(エクセル)
-
7
エクセルマクロでシート内にある画像のみを選択する
Excel(エクセル)
-
8
マクロを実行すると画像がズレてしまいます
その他(Microsoft Office)
-
9
VBAでセルを指定した画像のコピー&ペーストを繰り返したい
Excel(エクセル)
-
10
VBAでエクセルのシート上の画像のリサイズと配置を行いたい
Excel(エクセル)
-
11
Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて
Excel(エクセル)
-
12
VBAで選択した画像を貼り付けたい
Excel(エクセル)
-
13
Excel マクロ 画像をリンクせずかつ圧縮して貼りつける方法を教えてください
Excel(エクセル)
-
14
EXCELに画像を貼り付けマクロの画像大きさ調整にについて教えてください。
その他(Microsoft Office)
-
15
EXCELのVBAで画像を選んだ順に貼り付ける方法
Excel(エクセル)
-
16
任意フォルダから画像をすべてエクセルの指定マスに貼り付けをしたい
Visual Basic(VBA)
-
17
Excelマクロ 選択画像の大きさを100%に
その他(Microsoft Office)
-
18
Pictures.Insertメソッド⇒Shapes.AddPictureメソッドに変更したいです。
Visual Basic(VBA)
-
19
エクセル マクロで、選択している画像の数を数えたい
Excel(エクセル)
-
20
画像を削除したい(VBA)
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】写真の縦横比を変えずに...
-
excelで
-
常に「すべての列のサイズを自...
-
テキストファイル内の文字列検索
-
Not kind:Folders
-
突然エクセルのデータが何ヶ月...
-
検索したファイルの場所を調べ...
-
google Drive 容量を減らせない...
-
Apoint2Kってスパイウェアでし...
-
フォルダのプロパティでセキュ...
-
ワードの作成日時と更新日時
-
Cドライブにconfig msiというフ...
-
タスクスケジューラで指定フォ...
-
Ububtuでファイル共有できない...
-
ファイル並び順がバラバラで困...
-
添付などのファイル選択でのフ...
-
貼り付けとショートカットの貼...
-
全CSVファイルに一行だけ追加し...
-
ショートカットファイルそのも...
-
Desktopという構成設定のアイコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA】写真の縦横比を変えずに...
-
エクセルの数式で教えてください。
-
VBAで同一フォルダにあるブック...
-
パイソンでエクセルマクロを動...
-
フォルダ名表示をするには?
-
Not kind:Folders
-
常に「すべての列のサイズを自...
-
検索したファイルの場所を調べ...
-
タスクスケジューラで指定フォ...
-
ファイル並び順がバラバラで困...
-
VB.net 任意の例外を発生させ...
-
System32内のファイルを書き換...
-
ショートカットファイルそのも...
-
レジストリの変更が保存されない
-
ネットワーク経由の共有ファイ...
-
Cドライブにconfig msiというフ...
-
Win 10エクスプローラーについ...
-
貼り付けとショートカットの貼...
-
コマンドプロンプトでファイル...
-
VMWare Playerの共有フォルダは...
おすすめ情報
ありがとうございます。
画像の表示位置は中央になっています。
サンプル画像で試してみたところはみ出ることはなかったのですが
実際に貼り付けたい画像(黒塗りにしています)で試すと
書いていただいた部分を変更してもはみ出てしまいます、、、