- ベストアンサー
エクセルのVBAを勉強中
VBAの勉強をしております。 初心者なので、なんでこんなの分からんの!と言わず、教えていただけたらと思います。 シート1のA2からD2まで入力したものを、コピーしてA4からD4に貼り付けるという式は、下記でいけると思いますが、 シートをまたいだ時はどうなるのでしょうか。 例えば、A2からD2まで入力したものを、シート2のA4からD4に貼り付ける場合は、どうなるのでしょうか。 また、シート1のA2:D2までの入力を何度か繰り返した場合、シート2への貼り付けが、A5:D5、A6:D6、A7:D7とどんどん下に溜まっていく式を教えてください。 Range("A2:D2").Copy Destination:=Range("A4:D4")
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
シートをまたいだコピーの場合は、標準モジュールの中にかきます。それぞれのシートごとのVBAではできません。 標準モジュール内に sheets("sheet1").select 'でシートを指定 Range("A2:D2").Select '入力場所の指定 Selection.Copy 'コピー Sheets("Sheet2").Select 'でシートの切り替え Range("A2:D2").Select '書込場所の指定 ActiveSheet.Paste '貼り付け sheets("sheet1").select 'で元のシートを指定 で別シートへの貼り付けができます。 ここで、貼り付け場所を順に変えてやれば下に積み重なっていくようにできます。 貼り付け場所を変える方法は、whileでも使いましょう。 j=1 while cells(j,1)<>"" j=j+1 wend これで1行目からA列のチェックをし空欄になるまでj=j+1を繰り返します。A列j行目までいってそこが空欄ならWhileを終了しますので変数jに行番号が入っています。 Range("A2:D2").Select の替わりに Range("A" & j & ":D" & j).Select と入れてやれば空欄になった行に書き込みます。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
>標準モジュールの中に書き込めばいいんですね。 別に、シートモジュールに書き込んでもよいのですが、一般的な目的の場合は、Excel VBAでは、標準モジュールに書き込むのが標準的な書き方です。ただ、このレベルでは、あまり違いがありません。 Range("A2:D2").Copy Sheet2.Range("A4:D4") は、最初のRange("A2:D2")は、アクティブ・シートだということで、コピーソースのシートが限定されません。 >A5:D5、A6:D6、A7:D7 >とどんどん下に溜まっていく式を教えてください。 '-------------------------------------- 一括式 Sub test() Dim i As Integer '回数 i = 5 Sheet1.Range("A2:D2").Copy Sheet2.Range("A4").Resize(i) End Sub '-------------------------------------- 'インクリメンタル式 Sub test2() Dim i As Integer With Sheet1 .Range("A2:D2").Copy For i = 5 To 7 '行番号 .Paste Sheet2.Cells(i, 1) Next i End With Application.CutCopyMode = True End Sub '-------------------------------------- 似たような同じ繰り返しは、書かないのが基本です。 >そ・そ・そんなことまで、教えなければならんのか! 本当に、どうやって書くのが正しいのか、私など分かるわけではありません。ただ、VBAの基本的なルールやプログラミングとして、どう作るかを考えて、毎日、勉強していくしかありませんね。でも、今回のようなレベルこそ、本当は難しいのかもしれません。これで良いのかは分かりません。
- Zero_0
- ベストアンサー率35% (72/201)
標準モジュール内のsubの実行は、マクロ実行ボタンでできます。ツールバーのVisualBasicの所にあります。 または、シート上にボタンを作ってそれをクリックしたときのVBAにsub名をかくことで実行できます。 プログラムの性質上後者の方がいいかと思います。
- Aquarius172
- ベストアンサー率36% (111/308)
難しく考えすぎです。 [Sheet1]の特定のセルのデータを[Sheet2]の特定のセルにコピーするのであれば、下記のコードで十分です。 >>Sheet1に記入した場合 Sheet2.Range("A4:D4").Value = Range("A2:D2").Value >>標準モジュールに記入した場合 Sheet2.Range("A4:D4").Value = Sheet1.Range("A2:D2").Value 書式ごとコピーする場合は >>Sheet1に記入した場合 Range("A2:D2").Copy Sheet2.Range("A4:D4") >>標準モジュールに記入した場合 Sheet2.Range("A4:D4").Value = Sheet1.Range("A2:D2").Value 同一のデータを複数のセルにコピーするなら Dim x As Integer Dim szCells As String For x = 4 To 14 szCells = "A" & x & ":D" & x Sheet2.Range(szCells).Value = Sheet1.Range("A2:D2").Value Next x 書式ごと複数のセルにコピーするなら Dim x As Integer Dim szCells As String For x = 4 To 14 szCells = "A" & x & ":D" & x Sheet1.Range("A2:D2").Copy Sheet2.Range(szCells) Next x *上記の2このコードは標準モジュールに記入した場合です。 あとは、これを参考に組み替えた見てください。 プログラムを覚えるには、考える事が重要です。
補足
ありがとうございます! なるほど、標準モジュールの中に書き込めばいいんですね。 うーん、書き込んだはいいんですが、それを実行するにはどうしたらいいんでしょうか。 そ・そ・そんなことまで、教えなければならんのか! と言うお気持ちは重々承知しております。 ホントにすいません。まだまだわたくし、ヒヨッ子なので許してください。