• 締切済み

マクロのコードをご教授下さい。大変困っております。

画像貼付のマクロの作成について 環境はwindows7 Excel2013 うまくコードが組めないのでコードのご教授お願いいたします。 マクロの記録を使ってもどうもうまく行かず壁にぶち当たっております。 sheet1のE列の画像をsheet2のE列に貼り付けるマクロを作成中なのですが、 sheet1の画像は(デジカメで撮影した画像です。) E10~E19 E30~E39 E50~E59 E70~E79  ・  ・  ・ E410~E419 まであります。10行ずつ11行飛ばして419行まで貼り付いています。 これをsheet2のE列に貼り付けるマクロをお尋ねしたいです。 sheet2の貼り付け先は以下の通りです。 14行空けながら5行ずつ貼り付けて18行空けてまた5行貼り付けていくのを繰り返します。 sheet1 E10 → sheet2 E5(E5~H16を結合しています) sheet1 E11 → sheet2 E19(E19~H30を結合しています) sheet1 E12 → sheet2 E33(E33~H44を結合しています) sheet1 E13 → sheet2 E47(E47~H58を結合しています) sheet1 E14 → sheet2 E61(E61~H72を結合しています) sheet1 E15 → sheet2 E79(E79~H90を結合しています) sheet1 E16 → sheet2 E93(E93~H104を結合しています) sheet1 E17 → sheet2 E107(E107~H118を結合しています) sheet1 E18 → sheet2 E121(E121~H132を結合しています) sheet1 E19 → sheet2 E135(E135~H146を結合しています) sheet1 E30 → sheet2 E153(以下、同様に結合しています。) sheet1 E31 → sheet2 E167    ・     sheet1 E32 → sheet2 E181    ・ sheet1 E33 → sheet2 E195    ・ sheet1 E34 → sheet2 E209    ・ sheet1 E35 → sheet2 E227    ・ sheet1 E36 → sheet2 E241    ・ sheet1 E37 → sheet2 E255    ・ sheet1 E38 → sheet2 E269    ・ sheet1 E39 → sheet2 E283    ・   ・       ・   ・       ・   ・       ・ sheet1 E410 → sheet2 E2965   ・ sheet1 E411 → sheet2 E2979   ・ sheet1 E412 → sheet2 E2993   ・ sheet1 E413 → sheet2 E3007   ・ sheet1 E414 → sheet2 E3021   ・ sheet1 E415 → sheet2 E3039   ・ sheet1 E416 → sheet2 E3053   ・ sheet1 E417 → sheet2 E3067   ・ sheet1 E418 → sheet2 E3081   ・ sheet1 E419 → sheet2 E3095(E3095~H3016を結合しています) 2重のループ処理あるいは2つの変数を使うループ処理で組んでみましたが、 うまくいきません。 貼付元と貼付先のレイアウトが同一の場合の自動貼付マクロはうまく組めたのですが、 レイアウトに相違がある場合ロジック的にもコード的にも先に進めなくなっています。 この画像の貼付のループ処理のマクロはどのように記述するのが正解でしょうか? また、 貼付元(sheet1のE列)に画像のない行があったらループを抜ける処理や セルのサイズが違うため貼付先で画像が中央に貼り付いて周りに余白でできるような処理を入れたい場合のコードはどのようになりますでしょうか? いろいろと試行錯誤しましたがうまくいかないため、 詳しい方、お分かりの方にご教授頂けますと大変助かります。 よろしくお願い致します。

みんなの回答

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

回答があまりでませんでしたね。ややこしいことはややこしい問題と思った。 回答者の場合の特殊例であって、読者にはパターン的に興味を引く問題ではないように思うからそうなったのかな。 >2重のループ処理あるいは2つの変数を使うループ処理で組んでみましたが この路線の考えでやってみました。 '===Sheet1のE列の行番号 'スタートは10、終わりは仮に400とした '20単位で=Step 20 'iは1づつ増やして毎回繰り返し '増やす数iが9を超えると次の繰り返しへ '====Sheet2のE列 '初期値 5、階差14 標準モジュールに '============ Sub test01() k = 1 l = 5 For j = 10 To 400 Step 20 For i = 0 To 9 'If i > 19 Then Exit For Cells(k, "A") = j + i Cells(k, "B") = l 'Sheet2の系列の行番号の先頭行 '--- k = k + 1 '次の行のA列のセルに数をセット l = l + 14 Cells(k, "B") = l Next i Next j End Sub 実際の環境が当方にはない、また説明が十分ではないので、十分理解している自身もなく、十分なテストができないので、参考になる点があれば、参考にして、使えたら使ってください。 >2つの変数を使うループ処理 ループに関する変数は少ない方がよいと思うが、初めは余り窮屈に考えず、(プログラムの中で)ふんだんに使って、あとからよく考えて、減らせる(ある変数が別の変数に関連付けられる)ものは(ある変数から別の変数を導出して)減らすようにしたら。

すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8653/18507)
回答No.1

全部で210枚の画像があるのですね。 for i= to 210 s=(i-1)+(INT((i-1)/10)+1)*10 d=(i-1)*14+1+(INT((i-1)/5)+1)*4 'ここでsheet1のs行目の画像をsheet2のd行目にコピーする next i

すると、全ての回答が全文表示されます。

関連するQ&A