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

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

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

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

Q&A

解決済

1回答

8025閲覧

VBAで画像を指定場所に張り付けたいです。

tanetanetane

総合スコア6

VBA

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

0グッド

0クリップ

投稿2020/07/14 05:55

編集2020/07/14 07:40

失礼しました。
再投稿です。

VBAで画像を指定場所に張り付けたいです。
VBA超初心者です。

画像を任意のフォルダから順番に張り付けるコードを作成したいです。
現在、挿入画像の座標をポイントで指定してますが頑張っても微妙にセルからずれてしまい困っています。

そこで画像の上部は任意のセルの上部に合わせ、行方向の位置はポイントで指定することはできますでしょうか。

画像を等間隔で4枚並べ、5枚目は4枚目と別の間隔で並べる
・・・写真四枚の塊が縦方向にいくつかあるようなものをつくっています。

初心者のため、現在のコードを大きく変えることなく出来れば嬉しいです。

宜しくお願いいたします。

VBA

1Sub 画像貼り付け() 2 3Dim lngTop As Long 4 Dim objFile As Object 5 Dim objFldr As FileSystemObject 6 Dim TheShape As Shape 7 Dim i As Integer 8 9Set objFldr = CreateObject("Scripting.FileSystemObject") 10 11lngTop = 47.5 12 13i = 0 14 For Each objFile In objFldr.GetFolder(ThisWorkbook.Path & "\picture").Files 15 16ActiveSheet.shapes.AddPicture _ 17 Filename:=objFile, _ 18 LinkToFile:=False, _ 19 SaveWithDocument:=True, _ 20 Left:=11, _ 21 Top:=lngTop, _ 22 Width:=252.834, _ 23 Height:=188.5 24 25i = i + 1 26 27If i Mod 4 = 0 Then 28 29lngTop = lngTop + 188.5 + 80 30 31Else 32 lngTop = lngTop + 188.5 + 16.05 33 End If 34 Next 35

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

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

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

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

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

y_waiwai

2020/07/14 05:56

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

ベストアンサー

セルにぴったり合わせたいというのであれば、座標をポイント計算するではなく、セルの座標を利用したほうがよいのでは。
以下のコードは4列x10行を1枚分の画像領域として等間隔(全列幅と行高さをそろえておく必要あり)に配置します。

VBA

1Sub 画像貼り付け() 2 3 Dim objFile As Object 4 Dim objFldr As FileSystemObject 5 Dim TheShape As Shape 6 Dim i As Integer 7 Dim x, y As Integer 8 Dim r, c As Integer 9 10 Const X_NUM = 4 ' 横にいくつ画像を並べるか 11 Const X_COLS = 5 ' 1枚の画像とする列数 12 Const Y_ROWS = 10 ' 1枚の画像とする行数 13 14 Set objFldr = CreateObject("Scripting.FileSystemObject") 15 16 i = 0 17 For Each objFile In objFldr.GetFolder(ThisWorkbook.Path & "\picture").Files 18 19 r = Int(i / X_NUM) * X_COLS + 1 ' セル位置(行)を計算 20 c = (i Mod X_NUM) * Y_ROWS + 1 ' セル位置(列)を計算 21 x = ActiveSheet.Cells(r, c).Left ' セルの座標(X)を取得 22 y = ActiveSheet.Cells(r, c).Top ' セルの座標(Y)を取得 23 24 ActiveSheet.shapes.AddPicture _ 25 Filename:=objFile, _ 26 LinkToFile:=False, _ 27 SaveWithDocument:=True, _ 28 Left:=x, _ 29 Top:=y, _ 30 Width:=252.834, _ 31 Height:=188.5 32 33 i = i + 1 34 Next 35 36End Sub 37

投稿2020/07/14 08:03

ttyp03

総合スコア17000

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

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

tanetanetane

2020/07/14 08:48

ご丁寧にありがとうございます。 画像を縦に4枚で1セット、さらにそれを縦に並べたいです。 ■ ■ ■ ■ ■ ■ ■ ■ このような感じです。 早速いただいたコードをいじってみました。 画像と画像の縦方向の間隔のサイズはどのようにすれば良いのでしょうか。 セルの個数で間隔を指定したいと思っています。 よろしくお願いいたします。
ttyp03

2020/07/15 00:38

もう解決済みになってしまいましたが、一応コメントを。 すみません、縦に4つ並べて1つのグループなのですね。 質問内容を取り違えていました。 いずれにしてもrとcの計算式を変更すれば対応可能と思いますのでお試しください。
tanetanetane

2020/07/15 00:39

ご丁寧にありがとうございました。 なんとかなりそうです。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問