
Excelマクロについては初心者です。
特定のフォルダにある画像をExcelシートに自動で貼り付けるマクロが必要になりました。
EXCELシートは添付画像のように単純な形式です。
A2セルに画像名入力
A1セルに画像を自動で貼り付け
条件:自動で貼り付けた画像は縦横比率でA1セルに強制的に収める
以下のマクロはA2セルに画像名を入力し、excelファイル開く直したときにA1セルにA2セルに入力されている名前の画像ファイルを貼り付けるという内容のマクロです。
マクロをいろいろいじってみて、画像貼り付け、中央揃えまでは上手くいったような気がしますが、
画像が小さく貼り付けてしまいまして(添付画像)、画像の大きさを調整に困っています。
ーーーーーーーーーーーーーーー
Private Sub Workbook_Open()
Dim shape As shape
Dim myRange As Range '画像を配置するセル範囲
Dim rX As Double, rY As Double
Dim objShape As shape
Set myRange = Range("A1")
Set targetRange = Range("A2")
With ActiveSheet.Pictures.Insert("C:\Users\ovner\Pictures\" & targetRange & ".jpg")
.Left = myRange.Left
.Top = myRange.Top
With .ShapeRange
.LockAspectRatio = msoTrue
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
rX = myRange.Width / .Width
rY = myRange.Height / .Height
If rX > rY Then
.Height = .Height * rY
.Width = .Width * rY
Else
.Height = .Height * rX
.Width = .Width * rX
End If
.Left = myRange + (myRange.Width - .Width) / 2
.Top = myRange.Top + (myRange.Height - .Height) / 2
End With
Application.ScreenUpdating = True
Cancel = True
End With
End Sub
ーーーーーーーーーーーーーーー
質問1:どすれば画像ファイルを縦横比率でA1セルに縦いっぱいまで拡大し、貼り付けすることができるでしょうか?
質問2:” ActiveSheet.Pictures.Insert("C:\Users\ovner\Pictures\" & targetRange & ".jpg") ”
このコードだと画像はリンクになると思いますが、
:” ActiveSheet.Shapes.AddPicture("C:\Users\ovner\Pictures\" & targetRange & ".jpg") ”
このように、リンクではない形式でも画像を自動貼り付けできるでしょう?
教えてください。よろしくお願いします。

A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#1です
>質問1
縦横比率を変えず、高さがセルいっぱいになるようなサイズ変更でしょうか?
かも知れませんので With ActiveSheet.Shapes.AddPicture 部分を下記のようにします。幅をセル内に収める場合は、コメントアウトしている部分を実行コードにしてください。(いろいろ試してください)
With ActiveSheet.Shapes.AddPicture( _
Filename:=filePath & strFileName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=1, Top:=1, _
Width:=0, Height:=0)
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
.LockAspectRatio = msoTrue '比率を固定
'幅をセル内に収める(下3行を生かすと幅が超える場合幅に合わせます)
' If .Width > myRange.Width Then
' .Width = myRange.Width
' End If
If .Height > myRange.Height Then '高さをセル内に収める
.Height = myRange.Height
End If
.Left = myRange + (myRange.Width - .Width) / 2
.Top = myRange.Top + (myRange.Height - .Height) / 2
End With
No.1
- 回答日時:
こんにちは
>質問1
縦横比率を変えず、幅もしくは高さがセルのいずれかにいっぱいになるようなサイズ変更でしょうか?
コードを見ると縦横共にいっぱいに成るようになっているようですが
>質問2
>ActiveSheet.Shapes.AddPicture("C:\Users\ovner\Pictures\" & targetRange & ".jpg") ”
このように、リンクではない形式でも画像を自動貼り付けできるでしょう?
はい出来ます。
Workbook_OpenやCancel = Trueを見ると、まだまだ問題が出て来そうですが、セルの関係から、複数取得なども考えられているのでしょうか?
下記にご質問のコードで標準モジュールに書き、ボタンなどから実行するサンプルを書きます。一応Dirで取得時のエラー回避を入れて置きます。
質問1については、ご質問コードそのままなのでせるの縦横いっぱいに表示されると思います。取敢えずの参考にしてください。
Private Sub test()
Dim shape As shape
Dim myRange As Range '画像を配置するセル範囲
Dim targetRange As Range
Dim filePath As String, strFileName As String
Dim rX As Double, rY As Double
Dim objShape As shape
Set myRange = Range("A1")
Set targetRange = Range("A2")
filePath = "C:\Users\ovner\Pictures\"
strFileName = Dir(filePath & targetRange & ".jpg")
If strFileName = "" Then MsgBox ("対象ファイルはありません"): Exit Sub
With ActiveSheet.Shapes.AddPicture( _
Filename:=filePath & strFileName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=1, Top:=1, _
Width:=0, Height:=0)
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
rX = myRange.Width / .Width
rY = myRange.Height / .Height
If rX > rY Then
.Height = .Height * rY
.Width = .Width * rY
Else
.Height = .Height * rX
.Width = .Width * rX
End If
.Left = myRange + (myRange.Width - .Width) / 2
.Top = myRange.Top + (myRange.Height - .Height) / 2
End With
End Sub
Qchan1962様 ありがとうございました。
質問1の件ですが、おっしゃった通り 縦横比率を変えず、幅もしくは高さがセルのいずれかにいっぱいになるようにしたいでした、私も昨日いろいろ試してみました。訳が分からないですが、「.LockAspectRatio = msotrue」 部分のtrue をfalseに変えるか、この行を削除で質問1の目的が達成しました。
質問2ですが、ボタン式も考えたんですが、200ぐらいのexcelファイルにすべてボタン作るのはどうかなと思ってやめました。
With ActiveSheet.Shapes.AddPicture( _
Filename:=filePath & strFileName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=1, Top:=1, _
Width:=0, Height:=0)
この部分を参考にさせていただきました。ありがとうございました。
Set myRange = Range("A1")
Set targetRange = Range("A2")
Set objShape = ActiveSheet.Shapes.AddPicture( _
Filename:="C:\Users\ovner\Pictures\" & targetRange & ".jpg", _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=1, _
Top:=1, _
Width:=0, _
Height:=0)
このように変更することで目的を達成しまた。
毎回エクセルファイルを開いたときに写真が貼り付けられファイルサイズが大きくなるので、ファイルを閉じたときに画像をいったん削除するようにマクロを追加しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
エクセルマクロでシート内にある画像のみを選択する
Excel(エクセル)
-
エクセル(2013)VBA-図の縦横比を変えずにセルにおさまる最大限の大きさにする
Excel(エクセル)
-
-
4
【EXCEL VBA】ダブルクリックでセルのサイズに合わせて画像を挿入に機能を追加したいです。
Visual Basic(VBA)
-
5
Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて
Excel(エクセル)
-
6
エクセルで簡単に写真を挿入したい
Excel(エクセル)
-
7
セルをダブルクリックで、画像を選択、挿入したい時
Excel(エクセル)
-
8
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
9
EXCELのVBAで画像を選んだ順に貼り付ける方法
Excel(エクセル)
-
10
Pictures.Insertメソッド⇒Shapes.AddPictureメソッドに変更したいです。
Visual Basic(VBA)
-
11
VBAでエクセルのシート上の画像のリサイズと配置を行いたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbaで指定したセルより下の行を...
-
【マクロ】1つのセルから結合...
-
VBAでの SendKeysの変数指定方法
-
EXCELに画像を貼り付けマクロの...
-
ファイルサーバー上のexcelファ...
-
Excel VBA で色付きのセルの値...
-
エクセルでセルをクリックする...
-
VBA ボタンをセルの右側に合わ...
-
Excelでプルダウンからフィルタ...
-
マクロのデータ削除
-
【VBA】アクティブセルだけ背景...
-
Excel VBA:フォーム←→セルのア...
-
「段」と「行」の違いがよくわ...
-
【マクロ】実行時エラー '424':...
-
エクセル 上下で列幅を変えるには
-
Excel UserForm の表示位置
-
Excel VBAでのWorksheet_Change...
-
エクセルで離れた列を選択して...
-
VBA コードを実行すると画面が...
-
Excelで、あるセルの値に応じて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaで指定したセルより下の行を...
-
エクセルマクロで「セルのサイ...
-
エクセルでセルをクリックする...
-
VBAでの SendKeysの変数指定方法
-
Excel VBA:フォーム←→セルのア...
-
(エクセルVBA)セルを左クリッ...
-
Excelマクロ セルを行頭に移動
-
セルをクリックしたら色を変え...
-
IF関数で違う値もTRUEになる
-
【マクロ】1つのセルから結合...
-
マクロのデータ削除
-
【EXCEL-VBA】特定の値の入った...
-
Excel VBA で色付きのセルの値...
-
【VBA】アクティブセルだけ背景...
-
ダブルクリックでセルに色をつ...
-
ファイルサーバー上のexcelファ...
-
Excelでプルダウンからフィルタ...
-
EXCELに画像を貼り付けマクロの...
-
Excelの質問です。
-
Excelで数値の変化をカウントし...
おすすめ情報