• ベストアンサー

ExcelVBAで複数セルを別シートに貼り付けたい

Excel VBAでデータをコピーして、別シートに貼り付けるどうしたらいいのでしょうか。 Sheet1のセルA1からA4のデータをコピーして、Sheet2のC2からc5に貼り、次はSheet1のセルB1からB4のデータをコピーしてSheet2のC7からc10に貼りを500行ほど繰り返し(コピーするデータは、4行づつ横へ移動し、貼り付けるほうは4行づつ縦へ移動します。) それが終わったら、今度はB列、c列と100列ほど同じ操作を繰り返します。 いろいろな方法を試しましたが、なかなかうまくいきません。 どなたか教えていただけませんでしょうか。よろしくお願いいたします。

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

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

質問文で途中から、質問で言っていることがよくわからない ーー 下記でSheet1にテストデータを作る Sub test02() k = 1 For j = 1 To 256 For i = 1 To 4 Cells(i, j) = k k = k + 1 Next i Next j End Sub ーー 標準モジュールに Sub test01() Application.ScreenUpdating = False Dim sh1, sh2 Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") k = 2 For i = 1 To 100 Step 4 For j = 1 To 256 sh1.Range(sh1.Cells(i, j), sh1.Cells(i + 3, j)).Copy sh2.Cells(k, "c") k = k + 5 Next j Next i Application.ScreenUpdating = False End Sub で実行すると Sheet2のC2以下 1 2 3 4 5 6 ・・略 1020 1021 1022 1023 1024 のようになる。 C列は4つの値を貼り付けて、1行あけてよいのですね。 ーーーー >500行ほど繰り返し の意味と >それが終わったら、今度はB列、c列と100列ほど同じ操作を繰り返します とはどのシートのことを言うのか。 それまでと、後半はどうも路線が違うように感じたが。 ーー あとは、質問者で適当に修正・訂正するか、質問で言いたいことを補足したらどうです。

ruru009
質問者

補足

ありがとうございます!ありがとうございます<(_ _)> わかりにくい質問なのに答えてくださって感謝します! そうです!前半はこういうことです! 後半の質問、すみません…自分で読み返してもヘンでした。いいかげんわからなくって、半べそでやってたものですから、行も列もごっちゃになってました。 修正させてください。 Sheet1にはもともと、A1からA4、一行あけてA6からA9、一行あけてA10からA13と、500行ほどつづいていて(B列以降も同じ)、6行目から9行目まではSheet3へコピー(位置はSheet2と同じ)。10行目から13行目は、Sheet2のD2からD5(C列と同じ感じで)、15行目から18行目はSheet3へと繰り返したいです。 これで、わかりますか? よろしくお願いします。

その他の回答 (2)

回答No.3

>もっともっと学ばないといけませんね。何冊かの本を読んだのですが、 >本の例題とかはやってて、なんとなく理解できるのですが、 ひたすら、問題を解いてもよいのでは? >どういう勉強の仕方をすると、一番よいのでしょうか。 VBA挫折してるんで、、、どうするとよいのでしょうかね? 当方、マクロの自動記録でほとんど対処してます。 そこで、ちょっといじるだけです。IF構文やFor~nextの繰り返し構文程度しか使えませんが。 >(すみません、質問の内容と違うところへ行ってしまって…) 新たにスレッドを立てて質問したほうが広く回答が得られます

ruru009
質問者

お礼

いつも朝早く、ありがとうございます。 いろいろご回答いただき、感謝いたします。 そうですね、今までの問題、もう一度やってみようかと思います。 ちょっといじる、いじり加減がうまくいかないんです(^_^;) なかなか思うように繰り返してくれなかったりして… 当初の質問とは違うことまで、親切にご回答くださり、改めて感謝いたします。 ありがとうございました。 またお世話になることもあるかもしれませんが、その時もどうぞよろしくお願いいたします。

回答No.2

対象が文字列として数式+マクロ(自動記録程度ですが) Sub Macro1()   Dim n As Byte      'Sheet2!C2セルに =IF(MOD(ROW(A1),5)=0,"",INDEX(Sheet1!$A$1:$CV$4,MOD(ROW(A1),5),INT((ROW(A1)+4)/5)))      n = 1   Sheets("Sheet" & n + 1).Select   Range("C2:C500").FormulaR1C1 = _      "=IF(MOD(ROW(R[-1]C[-2]),5)=0,"""",INDEX(Sheet1!R" & n * 5 - 4 & "C1:R" & n * 5 - 1 & "C100,MOD(ROW(R[-1]C[-2]),5),INT((ROW(R[-1]C[-2])+4)/5)))&"""""   n = 2   Sheets("Sheet" & n + 1).Select   Range("C2:C500").FormulaR1C1 = _      "=IF(MOD(ROW(R[-1]C[-2]),5)=0,"""",INDEX(Sheet1!R" & n * 5 - 4 & "C1:R" & n * 5 - 1 & "C100,MOD(ROW(R[-1]C[-2]),5),INT((ROW(R[-1]C[-2])+4)/5)))&"""""   n = 3   Sheets("Sheet" & n + 1).Select   Range("C2:C500").FormulaR1C1 = _      "=IF(MOD(ROW(R[-1]C[-2]),5)=0,"""",INDEX(Sheet1!R" & n * 5 - 4 & "C1:R" & n * 5 - 1 & "C100,MOD(ROW(R[-1]C[-2]),5),INT((ROW(R[-1]C[-2])+4)/5)))&""""" End Sub 範囲を修正したり、繰り返し構文を使ったり、数式のままなので値化したりする必要があると思います

ruru009
質問者

お礼

朝早くからご回答いただき、ありがとうございました。 最初から、最後まで、コードを明記くださって、ありがとうございます <(_ _)> 実行してみて、いろいろさわってみてますが、こういうコードの書き方もあるのですね。セルの表現の仕方、シートの選び方等いろいろあって、勉強になります。 もっともっと学ばないといけませんね。何冊かの本を読んだのですが、本の例題とかはやってて、なんとなく理解できるのですが、自分のやりたい事をコードにしようとすると、いろいろ組み合わせなければいけなくなり、その組み合わせ方がよくないのか、エラーばかりで… どういう勉強の仕方をすると、一番よいのでしょうか。 (すみません、質問の内容と違うところへ行ってしまって…) アドバイスがあれば、ぜひお願いします。

関連するQ&A