質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

9281閲覧

画像を指定セルに貼り付けたい

noncha930

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/02/08 06:05

編集2019/02/08 06:08

前提・実現したいこと

1つのシート上に、30枚程の写真を指定セルに貼り付けていくツールを作成したいです。
フォルダ内にある写真を【ファイル名】で指示して【指定セル】に貼り付けたいです。

現在はセル位置を下記の記述で指定しています。

Sub 写真貼付() Worksheets("写真").Shapes.AddPicture _ Filename:="C:\Users\Desktop\フォルダ名\ファイル名.JPG", _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=0, _ Top:=363, _ Width:=437, Height:=325 Worksheets("写真").Shapes.AddPicture _ Filename:="C:\Users\Desktop\フォルダ名\ファイル名.JPG", _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=0, _ Top:=726, _ Width:=437, Height:=325 ’本来はこの後大量に続く。。。。 End Sub

30枚以上の写真を貼り付けていくので、いちいち座標を指示をするのではなく
セル指定にして貼り付けていきたいです。
(つまり現在は30枚分手打ちで座標を記述している)

【理想の形】
Left:=0, _
Top:=363, _

の部分が

RANGE("A1")

と指定できる。

【補足】
・写真サイズとセルサイズはぴったりなのでA1セルの左端、もしくは中央に貼り付けられたら最高です。
・初心者でやっとここまでできたので大幅に変えずにできると幸いです。
(AddPictureを使用していたい)

初心者ですが、何卒宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Range("")からLeftとTopを持ってくればいいですね。

方法1:一旦Rangeオブジェクトを退避

VBA

1Dim r As Range 2Set r = Range("A1") 3Worksheets("写真").Shapes.AddPicture _ 4Filename:="C:\Users\Desktop\フォルダ名\ファイル名.JPG", _ 5 LinkToFile:=False, _ 6 SaveWithDocument:=True, _ 7 Left:=r.Left, _ 8 Top:=r.Top, _ 9 Width:=437, Height:=325

方法2:直接Rangeを指定

VBA

1Worksheets("写真").Shapes.AddPicture _ 2Filename:="C:\Users\Desktop\フォルダ名\ファイル名.JPG", _ 3 LinkToFile:=False, _ 4 SaveWithDocument:=True, _ 5 Left:=Range("A1").Left, _ 6 Top:=Range("A1").Top, _ 7 Width:=437, Height:=325

投稿2019/02/08 06:27

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noncha930

2019/02/08 06:42

一瞬でできました,,,感動です。。 本当にありがとうございます! 追加で質問よろしいでしょうか。 現在わざわざフォルダパスを記述して、そのフォルダ内でしかツールが稼働しない仕様になっています。 ▼原因箇所 Filename:="C:\Users\Desktop\フォルダ名\ファイル名.JPG", フォルダを気にせずに稼働するようにするためにはどのような記述にしたらよろしいでしょうか。 ご教授いただけると幸いですm(_ _)m
ttyp03

2019/02/08 06:47

Excelと同じフォルダに入っているということでしょうか。
ttyp03

2019/02/08 06:53

Excelと同じフォルダに画像があるなら、パスを書かなければカレントフォルダを見てくれます。 Filename:="ファイル名.JPG",
ttyp03

2019/02/08 06:55

画像がどこにあっても動くようにする、ということだと無理ではないですが、現実的に実装が大変かと思います。 ファイルがどこにあるかをPC内を検索しないといけないので。
ttyp03

2019/02/08 06:56

それとも全部のAddPictureにフルパスで指定したくない、ということなら、変数にパスを格納しておいて、AddPictureの時に結合すればよいです。 Dim path As String path = "C:\Users\Desktop\フォルダ名\" ~ Filename:=path & "ファイル名.JPG",
noncha930

2019/02/08 07:04

A、B、Cとフォルダに写真がたくさん入っていて、 マクロが組んであるエクセルを 各フォルダに格納したうえでマクロを実装させたい、という感じです。 いろいろ書いていただいたのに理解できず申し訳ないです。
noncha930

2019/02/08 07:05

"C:\Users\Desktop\フォルダ名\ファイル名.JPG", この部分を変数にして、今エクセルが入っているフォルダ! というような記述に変えたいです。m(__)m
ttyp03

2019/02/08 07:08

>この部分を変数にして、今エクセルが入っているフォルダ! これなら最初に書いた方法で大丈夫です。 Filename:="ファイル名.JPG", ファイル名は固定ってことでいいんですよね? (A,B,Cどのフォルダにも同じファイルが入っている)
ttyp03

2019/02/08 07:16

それとも、ファイル名を指定せずにExcelと同じフォルダにある画像を全部貼り付ける、でしょうか。
noncha930

2019/02/08 07:25

Worksheets("写真").Shapes.AddPicture _ Filename:="1-1.JPG", _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Range("A3").Left, _ Top:=Range("A3").Top, _ Width:=437, Height:=325 Worksheets("写真").Shapes.AddPicture _ Filename:="C:\Users\ngy_haken5\Desktop\写真貼付け\1-2.JPG", _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Range("A28").Left, _ Top:=Range("A28").Top, _ Width:=437, Height:=325 Worksheets("写真").Shapes.AddPicture _ Filename:="C:\Users\ngy_haken5\Desktop\写真貼付け\1-3.JPG", _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Range("A53").Left, _ Top:=Range("A53").Top, _ Width:=437, Height:=325
noncha930

2019/02/08 07:25

これがずっと続く感じになります・・ 教えちただいた通り Filename:="1-1.JPG", _ にしたところ、写真が貼付けされなくなってしまいました。。
ttyp03

2019/02/08 07:31

C:\Users\ngy_haken5\Desktop\写真貼付け、にExcelファイルは置いてあるんでよね?
noncha930

2019/02/08 07:34

写真も入っています
ttyp03

2019/02/08 07:35

こちらの環境ではできているので、Excelを一旦閉じて開きなおしてみてください。
noncha930

2019/02/08 07:39

何度か開きなおしておりますが直りません・・。
ttyp03

2019/02/08 07:40 編集

ダメですか。。。なんでだろう。 ではおまじないで以下を入れてみてください。 ChDir ThisWorkbook.Path 写真貼付関数の最初のところでよいです。
noncha930

2019/02/08 07:39

Sub 写真貼付() Sheets("写真").Select On Error Resume Next ''''''''''''''''''''''''''''''''''''''''''''''''''''1ページめ Worksheets("写真").Shapes.AddPicture _ Filename:="1-1.JPG", _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Range("A3").Left, _ Top:=Range("A3").Top, _ Width:=437, Height:=325 Worksheets("写真").Shapes.AddPicture _ Filename:="1-2.JPG", _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Range("A28").Left, _ Top:=Range("A28").Top, _ Width:=437, Height:=325 Worksheets("写真").Shapes.AddPicture _ Filename:="1-3.JPG", _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Range("A53").Left, _ Top:=Range("A53").Top, _ Width:=437, Height:=325
noncha930

2019/02/08 07:42

パス指定すると貼り付けられます。。 もう一度状況を整理してお伝えすると デスクトップ上に 【写真貼付け】というフォルダ そのフォルダの中に エクセル・写真が格納されている です。
ttyp03

2019/02/08 07:44

ChDir ThisWorkbook.Path これはやってみました?
noncha930

2019/02/08 07:44

おまじない見落としていました・・ おまじないを入力したところできました!!
noncha930

2019/02/08 07:44

これはどういった意味になるのでしょうか。 質問ばかりすみません。。
ttyp03

2019/02/08 07:48

いえいえ。 ChDirという関数は、カレントフォルダを変更する命令になります。 おそらく別の処理か何かでカレントフォルダが変更されている、もしくはブックの起動方法がショートカットか何かで別のフォルダから起動されているなど、カレントフォルダがExcelファイルがある場所を指していなかったのが原因になります。 なのでブックが置いてあるパスを取得して、カレントフォルダをそのパスに変更するようにしました。
noncha930

2019/02/08 07:54

なるほど。。。 本当に助かりました!提出時刻に間に合わせることができました 大変感謝しております!! 本当にありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問