Selection.End(xlDown)
は現在選択している位置からの最終行を表します。
この最終行に4を足せば表の末尾から3行間隔があきますので
表を貼り付けた後に下記のコードを追記すれば、次の表との間が3行開きます。
Cells(Selection.End(xlDown) + 4, ActiveCell.Column).Select
表の貼り付け->3行開ける・・・これを繰り返せば
思惑の動作が可能だと思います。
一番簡単なコードで書いてみました。
Sub test() Dim i As Long 'sub○○のすぐ下に書く '以下はまとめて書く i = 1 Do While i <> 4'iが4じゃなければ以下の作業を繰り返しなさい ActiveCell.Offset(1, 0).Activate'アクティブセルのひとつ下のセルをアクティブにしなさい If ActiveCell.Value = "" Then'もしそこが空白なら以下の処理をしなさい i = i + 1 If i = 4 Then'さらに、もしiが4なら以下の処理をしなさい ActiveCell.Offset(1, 0).Activate '貼り付けをするコードを書く End If Else'iが4じゃなければ、iを1にしなさい i = 1 End If Loop End Sub >||
ありがとうございました。頑張ってやってみます!
保存位置はいつでも選択した位置で指定したいのでしょうか。
もしA列を基準に、いつでも最下行に3列あけてコピーすると考えることが出来るなら、下記のようにもできます。
Sub copyNext() Dim nextRow As Long With Worksheets(1) nextRow = .Range("A" & .Rows().Count).End(xlUp).Row + 4 Worksheets(2).Range("A1:D10").Copy Destination:=.Range("A" & nextRow) End With End Sub
この例は二枚目のシートの"A1:D10" を 1枚目のシートの最下行に3列あけてコピーする例です。
蛇足ですが、
With ****
.###
End With
のように記述した場合、"." で始まる部分は
****.###
という意味になるので、最初の例で
.Range(・・・)
というのは
Worksheets(1).Range(・・・)
というように明示的に1枚目のシートを指したことになります。なので、最初の書き方は、複数のシートにまたがった処理を簡単にすることが出来ます。
Select を使うと、こういったことが出来ないので、一度試してみてはいかがでしょうか。
ありがとうございました。
表1を取り込むコードと表2を取り込むコードの間に(End Withの次)教えていただいたコードを入れてみたのですがどうもうまくいきませんでした。何かやり方が間違っているのでしょうか。