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

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

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

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

Q&A

解決済

4回答

8778閲覧

VBAで画像をリンクなしで決められた場所へ挿入したい

porpora_0316

総合スコア37

VBA

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

0グッド

0クリップ

投稿2019/08/23 04:48

VBAでの画像の挿入についての質問です。
画像をシート2のK15からR18(結合セル)に挿入しようと思い、

vba

1ActiveSheet.Pictures.Insert( _ 2 "C:\system2\Desktop\商品A\11111_1401.emf").Select

上記のコードを使ったところ、リンク貼り付けの為ほかの方のPCで見ると何も表示されていないことが判明しました。
なので、

vba

1Set objShape = ActiveSheet.Shapes.AddPicture( _ 2 Filename:="C:\system2\Desktop\商品A\11111_1401.emf", _ 3 LinkToFile:=False, _ 4 SaveWithDocument:=True, _ 5 Left:=1, _ 6 Top:=1, _ 7 Width:=0, _ 8 Height:=0)

こちらを使用したところ、今度は思い通りの場所に張り付いてくれません
(左上のところに見えないほど小さな画像が、なぜか上下反対で張り付きました)

どのようにすれば画像を思い通りの場所に貼れますか?

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

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

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

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

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

guest

回答4

0

コピペしたら、リンク貼り付けじゃなくなるみたいですね。

ExcelVBA

1Sub test1() 2 Dim rngTarget As Range 3 Dim sFName As String 4 5 sFName = "C:\system2\Desktop\商品A\11111_1401.emf" 6 7 With ActiveSheet.Pictures.Insert(sFName) 8 .CopyPicture 9 .Delete 10 .Parent.Paste 11 End With 12End Sub

とりあえず挿入してから、
位置・大きさを指定してもいいかも?

ExcelVBA

1Sub test2() 2 Dim sFName As String 3 Dim shpPicture As Shape 4 Dim rngTarget As Range 5 Const cMargin As Double = 2 6 7 sFName = Application.GetOpenFilename("画像,*.jpg", , "画像ファイルの選択") 8 If sFName = "False" Then Exit Sub 9 Set rngTarget = ActiveSheet.Range("K15").MergeArea 10 11 Set shpPicture = rngTarget.Worksheet.Shapes _ 12 .AddPicture(Filename:=sFName, _ 13 LinkToFile:=msoFalse, _ 14 SaveWithDocument:=msoTrue, _ 15 Left:=0, Top:=0, Width:=-1, Height:=-1) 16 With shpPicture 17 .LockAspectRatio = msoTrue 18 .Top = rngTarget.Top + cMargin 19 .Left = rngTarget.Left + cMargin 20 .Height = rngTarget.Height - cMargin * 2 21 End With 22End Sub

もちろん事前に計算しておくのもありですね。
(縦横の寸法を計算するのが面倒なので、
LockAspectRatio = msoTrue
として、後で、縦か横か基準を決める方がいいですかね。)
あと、
セルに合わせてセットすると、
罫線が隠れるので、微妙にずらすことも考える必要がありそうです。

参考URL>>
https://www.moug.net/tech/exvba/0120020.html
http://officetanaka.net/excel/vba/tips/tips174.htm

投稿2019/08/24 00:14

mattuwan

総合スコア2136

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

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

0

ベストアンサー

Left・Topの値はセル(Range)のLeft・Topと同じ基準・同じ単位のため、それを使って位置を指定すれば良いでしょう(大きさに関してもWidth・Heightで同様です)。

また、Excel限定の話ですがAddPictureのWidth・Heightに-1を指定すると元の画像の大きさで貼り付けができたりします。

vba

1Sub taratail207789Sample() 2 'https://teratail.com/questions/207789 3 4 Dim picturePath As String 5 picturePath = "画像ファイルのパス" 6 7 Dim ws As Excel.Worksheet 8 Set ws = ActiveCell.Worksheet 9 10 '画像の起点(左上)のセル。 11 Dim topleftCell As Excel.Range 12 Set topleftCell = ws.Range("K15") 13 14 Dim shp As Excel.Shape 15 Set shp = ws.Shapes.AddPicture( _ 16 Filename:=picturePath, _ 17 LinkToFile:=msoFalse, _ 18 SaveWithDocument:=msoTrue, _ 19 Left:=topleftCell.Left, _ 20 Top:=topleftCell.Top, _ 21 Width:=-1, _ 22 Height:=-1 _ 23 ) 24 25End Sub

投稿2019/08/23 09:48

imihito

総合スコア2166

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

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

0

Left 横の位置
Top 縦の位置
Width 画像の幅
Height 画像の高さ
です。
縦と横の基準位置が1、
幅と高さが0なので
左上に小さく表示されます。

投稿2019/08/23 05:03

torisan

総合スコア678

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

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

0

間違って投稿してしまいました。

スルーしてくださいm(__)m。

投稿2019/08/24 07:55

編集2019/08/24 07:58
hatena19

総合スコア33620

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問