• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロで画像を貼り付け )

エクセルマクロで画像を貼り付ける方法

このQ&Aのポイント
  • エクセルのマクロを使用して、画像を1列ずつスペースを空けて右方向に4枚ずつ貼り付ける方法がうまく動作しない。
  • マクロのコードを実行すると、画像を選択したセルの右側に指定された数の画像を貼り付けるが、画像のサイズが大きい場合はセル幅に合わせて自動的に調整される。
  • 画像の読み込みが終了したら、メッセージボックスが表示される。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>' 貼り付け先行を+1 > targetCol = targetCol + 2 ' 貼り付け先行を+1 参考に If targetCol >= 13 Then   targetCol = 7   targetRow = targetRow + 2 Else   targetCol = targetCol + 2 End If

coolboy777
質問者

お礼

ありがとうございます。 思っていた通りに動作しました。 この方法でのループできるのですね。 本当にありがとうございます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

この質問も、質問にコードだけ上げて、>「貼り付けたいのですがうまく動作が出来ません。」が、どううまくできないのか、文章での説明がない。 それがどううまくできないのか、説明するのが肝心ではないか。 読者・回答者に甘えて、長いVBAコードを読み解かす質問が多いが、他人の読者の手間を少なくすること。 また回答がピント外れにならないようにするためにもね。 VBスクリプトを使う人が多いと思うが、使わなくても、VBAだけでできそうだが。(この質問もこれらしい。) ーー 一案として、関心があれば、下記を参考にしてください。 (このほかにUserForm上やそのUserForm上のImageなどのコントロールの上に画像を 貼りつける方法の方が、シートに貼りつけるよりも標準かもしれないけれど。) どちらコントロールに張り付けるにしても For j=1 to 4 For i=1 to 6 ・・ のような仕組みでコントロールの位置を横X列、縦Y行的に仕組む。 ーー シートのセルの位置(Top,Left)や大きさ(Width,Height)を使って 位置の調整と大きさの調整ができるが、どうですか。 シートのセルを使うと配置の枠組みがしっかりする。多少の調整はむつかしいが。 たとえばB2、D2、F2、H2セルに画像を置き、第2列では、B4、D4、F4、H4に配置し、間1列や1行飛ばしているのは、この大きさを調整して間隔(多分等間隔)をあける意図です。 貼りつける方向はZ字状に進める(N字状でない。この例えはわかりますか。) 具体的にセルを指定する方法をとれば、変な風な乱れはなくなる方法だと思う。 本件画像数が少ないので、こういう方法も取れるのですが。 ーー 下記は画像の配置に重点を置いたテストです。 下記は「同じ画像」が貼りつく(内容的には意味のない)テストですが、 その下記のループの外側を画像の入ったフォルダのファイル名を順次捕まえるFor Each ・・・Nextで囲んでください。(またはVBSCriptを使わず、Dir関数利用する方法もあります。) Sub test01() Application.ScreenUpdating = False '--貼りつける行と列指定のため指定 c = Array("", "B", "D", "F", "H") r = Array(0, 2, 4, 6, 8, 10, 12) '--画像ファイルファイル(フォルダ) myFileName = "C:\Users\XXX\Pictures\PXXXXXX.jpg" '--余白間隔にする行の行高設定 c1 = Array("", "A", "C", "E", "G") '--余白行間隔 For j = 1 To 6 ActiveSheet.Rows(r(j) + 1).Select Selection.RowHeight = 40 Next j '--余白列間隔 For i = 1 To 4 ActiveSheet.Columns(c1(i)).Select Selection.ColumnWidth = 5 Next i '--画像貼り付け For j = 1 To UBound(r) For i = 1 To UBound(c) '--セルの高さと幅指定 ActiveSheet.Rows(j).Select Selection.RowHeight = 40 ActiveSheet.Columns(c(i)).Select Selection.ColumnWidth = 10 '--シートに画像貼り付け ActiveSheet.Range(c(i) & r(j)).Select Set myShape = ActiveSheet.Shapes.AddPicture( _ Filename:=myFileName, _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Selection.Left, _ Top:=Selection.Top, _ Width:=Selection.Width, _ Height:=40) Next i Next j Application.ScreenUpdating = True End Sub ーー 以下繰り返しテストには、下記が重宝するだろう。 Sub test02() '繰り返しテスト用のシートの全画像消去 ActiveSheet.DrawingObjects.Delete With ActiveSheet.Range("a1:K100") UseStandardHeight = True UseStandardWidth = True End With End Sub 参考 SaveWithDocument:=True, でエラーが出たときの参考 http://blog.livedoor.jp/katsuyausami/archives/52167036.html

coolboy777
質問者

お礼

参考マクロありがとうございます。 質問内容が少なくて申し訳ありませんでした。 これを参考に勉強してみます。 本当にありがとうございます。

専門家に質問してみよう