- ベストアンサー
VBAでコピー&ペーストをループ化する方法
- ワークシート(1)とワークシート(2)の間で特定のセル列をコピー&ペーストしたい
- ループを使用して列のデータが無くなるまで処理したい
- 既存のコードが動作しない
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 貼り付けたいワークシートのセルの空白まで i = 1 Do Until Worksheets(" 貼り付けたいワークシート").Cells(i, 2) = "" やりたいこと i = i + 1 Loop になりますが 一行目が空白なら何も起こりませんが、何がしたいのか良くわからなくなりました。 列のデータがなくなるまで、もしくは、貼り付けたいワークシートのセルの空白まで ということなのでしょうか?
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
たまたまエクセルVBAには最終データ入力済み(コピー貼り付けも)行を 見つけるやり方がある d=Range("A65536").End(Xlup).Row Sub test01() Worksheets("Sheet1").Range("A1:B5").Copy Sheets("Sheet4").Range("A65536").End(xlUp).Offset(1, 0) End Sub 貼り付け先はこれを繰り返せば良い。 貼り付け元は、条件を付けて終了条件をコードに書いて、ループを終了させる。 例 シートのA1:B5のデータを集める Sub test01() For i = 1 To 3 Worksheets("Sheet" & i).Range("A1:B5").Copy Sheets("Sheet4").Range("A65536").End(xlUp).Offset(1, 0) Next i End Sub
お礼
ご指導いただいた方法も試してみます、勉強になります。 この度はありがとうございました。
- kmetu
- ベストアンサー率41% (562/1346)
下から探して最後のデータが見つかるまでだと For i = 1 To Worksheets("ワークシート(2)").Range("E" & Rows.Count).End(xlUp).Row Worksheets("ワークシート(1)").Range("BJ" & i) = Worksheets("ワークシート(2)").Range("E" & i) Next 上から探して空白行までだと For i = 1 To Worksheets("ワークシート(2)").Range("E1").End(xlDown).Row Worksheets("ワークシート(1)").Range("BJ" & i) = Worksheets("ワークシート(2)").Range("E" & i) Next データが飛び飛びであった場合取り出すデータが変わります。
お礼
ご質問を増やして申し訳ありません、この度はありがとうございました。
補足
素早いご回答と丁寧なサンプルソースありがとうございます。大変助かりました。追加になりまして申し訳ありませんが、 「貼り付けたいワークシートのセルの空白まで」という判定はどんな構文を足せばよろしいでしょうか? いただいた構文で申しましたら、 Worksheets("ワークシート(1)").Range("BJ" & i) に End か <> "" などを使用するのでしょうか? ご質問が多くなり申しわけありませんがご確認の程お願い致します。
お礼
度々のご回答ありがとうございます。上記に頂いた構文を組み込んだ所思ったように動作致しました。 *-----------* 列のデータがなくなるまで、もしくは、貼り付けたいワークシートのセルの空白まで ということなのでしょうか? *-----------* はい上記のご指摘どおりの動きでございます、私が言葉足らずで申し訳ありません。 kmetuさんが一番回答していただきましたのでベストアンサーとさせていただきます。 この度は誠にありがとうございました。