dポイントプレゼントキャンペーン実施中!

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")

A 回答 (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 と入れてやれば空欄になった行に書き込みます。

この回答への補足

ありがとうございます!

なるほど、標準モジュールの中に書き込めばいいんですね。

うーん、書き込んだはいいんですが、それを実行するにはどうしたらいいんでしょうか。

そ・そ・そんなことまで、教えなければならんのか!
と言うお気持ちは重々承知しております。

ホントにすいません。まだまだわたくし、ヒヨッ子なので許してください。

補足日時:2005/05/21 17:21
    • good
    • 0

>標準モジュールの中に書き込めばいいんですね。



別に、シートモジュールに書き込んでもよいのですが、一般的な目的の場合は、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の基本的なルールやプログラミングとして、どう作るかを考えて、毎日、勉強していくしかありませんね。でも、今回のようなレベルこそ、本当は難しいのかもしれません。これで良いのかは分かりません。
    • good
    • 0

標準モジュール内のsubの実行は、マクロ実行ボタンでできます。

ツールバーのVisualBasicの所にあります。

または、シート上にボタンを作ってそれをクリックしたときのVBAにsub名をかくことで実行できます。
プログラムの性質上後者の方がいいかと思います。
    • good
    • 0

難しく考えすぎです。



[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このコードは標準モジュールに記入した場合です。


あとは、これを参考に組み替えた見てください。
プログラムを覚えるには、考える事が重要です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!