- ベストアンサー
excelのマクロ?範囲行をコピーしたいのです。
どなたか教えて下さい。 行1から行20までをコピーをして、それを「コピーしたセルの挿入」でN回実行させたいのですが、FOR命令文だけでは巧く出来ません。 ------------------------------------------------------------ ・コピー元の、行1から行20は固定で使用します。 ・セルの挿入先は N=1のとき・・・21行目に挿入します。 N=2のとき・・・41行目に挿入します。 (挿入先は、N*20+1 でいいようなきがしますが)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >「コピーしたセルの挿入」でN回実行させたい であれば Dim N As Long N = 2 With Rows("1:20") .Copy .Offset(20).Resize(20 * N).Insert End With Application.CutCopyMode = False …な感じですが、 >N=1のとき・・・21行目に挿入します。 >N=2のとき・・・41行目に挿入します。 からすると、挿入先が変動で、1回だけ・・・というような印象を受けます。 それだと Dim N As Long N = 2 With Rows("1:20") .Copy .Offset(N * 20).Insert End With Application.CutCopyMode = False ですか。いずれにしてもFor...Next構文は不要のようです。
その他の回答 (2)
- taocat
- ベストアンサー率61% (191/310)
こんばんは。 たぶん、Copyメソッドを1回実行して、 「コピーしたセルの挿入」をN回実行しているのでしょう。 「コピーしたセルの挿入」は普通の貼り付けと違って その度にCopyメソッドを実行しなければいけません。 ----------------------------------------------- Sub test() Dim N As Long For N = 1 To 2 Rows("1:20").Copy Rows(N * 20 + 1).Insert Shift:=xlDown Next Application.CutCopyMode = False End Sub --------------------------------------------- 以上です。
お礼
taocat様、ご回答ありがとうございました。 私の拙い質問をよく理解して下さってありがとうございます。 taocat様の回答内容が、私が一番想像(求めていた)していた内容に 近かったです。しかし、ANo.1の方の回答で解決してしまいました。 でも、個人的にはわかり易くていいです!
- imogasi
- ベストアンサー率27% (4737/17069)
質問の意味を理解できないので、例を挙げてみます。 1-20行を、簡単のため1-3行(Aれつだけ)の例にします。 A1:A3をa,b,c, A4をXXXXとします。 Sub Macro1() n = 3 For i = 1 To n Range("A1:A3").Select Selection.Copy Worksheets("Sheet1").Cells(i * 3 + 1, "A").Select Selection.Insert Shift:=xlDown Next i End Sub を実行すると、A1:A13が a b c a b c a b c a b c XXXXXX となりました。 これではどこが不適当ですか。
お礼
早速の回答、ありがとうございました。 私の質問が具体性に欠けていました。 思い違いさせてしまって済みませんでした。 ---------------------------------------------- 1行目から20行目までは、A4の専用伝票として設計してあります。 質問文の”N回”とはページ数を意味していまして、指定したページ数だけコピーしたいと言う事でした。 専用伝票は、各行の行の高さが違うので行毎そっくりコピーしたかった 訳です。 imogasi様の回答はサンプルとして使用させて頂きます。
お礼
pauNed様、どうもありがとうございました。 ご教授頂いた内容、上段のご回答で希望通りの事が出来ました。 ----------------------------------------------------- FOR文を使ったり、変数を使ったりしないとダメ?と 思っていましたのですごく勉強になりました。 今後ともよろしくお願いいたします。