• ベストアンサー

Excel VBA 複数のオブジェクトのコピーについて

皆様、こんにちは。 いつもお世話になっています。 ActiveSheetに、他のシートのRange("B4:AC58")をコピーしたいですが、 ActiveSheetのRange("B1")に入力された値に合わせて、Range("B4:AC58")がコピーされる回数を設定したいです。 例えば、Range("B1")に1が入力されていれば、Range("B4:AC58")を1回だけコピーする、2でしたら2回、etc. ループを作ればできそうですが、変数の設定がよくわからなくて困っています。 ループなしのものを一応、作りましたが、そこからはどうすればいいかを教えていただければ幸いです。 どうぞよろしくお願いいたします。 Dim i As Integer i = Worksheets("Sheet2").Range("B1").Value Dim MyForm As Variant Set MyForm = Worksheets("フォームtest").Range("B4:AC58") For ? Worksheets("Form").Activate MyForm.Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("B3") Next

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

for n = 1 to i   :   : ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("B" & 3 + ( n - 1 ) * 55 ) next n こういう事かな?

その他の回答 (2)

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

Destinationの問題でしょう。始めの質問だけだと、内容がはっきりしない。 補足で i = 1 の場合、Range("B3")へ、 i = 2 の場合、Range("B3")およびRange("B58") i = 3 の場合、Range("B3")、Range("B58")およびRange("B113") ・・・ なら、このルール性を式にして、指定したら仕舞いでしょう。プログラマーなら日常茶飯事で、それをまず考えるだけのこと。 3-58-113・・なら+55が推定される。それだけのこと。 iの回数の数字によって、行は 3+(i-1)*55

lyu05665
質問者

お礼

imogasi様、hige_082様、fujillin様、 反応が大変遅くなり申し訳ありません。 お蔭様で問題が解決できました。 本当にありがとうございました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

ループする回数がiに入っているのでしょうから For n = 1 To i  繰り返す処理 Next i みたいな感じでいけると思いますが、 >1回だけコピーする、2でしたら2回、~~ 同じものを同じところにコピーするわけではないでしょうから、コピーする内容、ペーストの位置が移動すると思います。 (まったく同じことを、何度繰り返しても結果は変わらないので) 具体的な変化が不明なので、「繰り返す処置」のところが書けませんが、回数に応じてそのあたりが変化するように(例えばnをインデックスにして書くとか)「繰り返す処置」の部分を書いてあげる必要があります。

lyu05665
質問者

補足

fujillin様、 返事をどうもありがとうございます。 おっしゃっているように、コピーするところは、コピーの回数によって変わります。 i = 1 の場合、Range("B3")へ、 i = 2 の場合、Range("B3")およびRange("B58") i = 3 の場合、Range("B3")、Range("B58")およびRange("B113") ・・・ のように、iは1つ増えれば、コピーの回数、そしてコピーするところを一つ増やしたいですが、やり方がわかりません。

関連するQ&A