プロが教える店舗&オフィスのセキュリティ対策術

Excel2003、OSはXPを使っています。

コピー元はブックAのL2からスタートして1行ずつをコピーし
コピー先はブックBのC12からスタートして10行飛ばしでペーストする。
コピー元のL列に空白セルが来たらやめたいと考えています。

具体的には
コピー元 -> コピー先
ブックA --> ブックB
Sheet1 --> Sheet1
L2 ------> C12
L3 ------> C22
L4 ------> C32


コピー元に空白セルが来たらやめる
といったイメージです。

初めてまだ3日程度なのでお恥ずかしいのですが、
以下のようなコードを作りましたが、a=の行で
「実行時エラー'9' インデックスが有効範囲にありません。」
と出てしまいます。
Dim a As Long
Dim dc As Long
Dim dct As Long
a = Worksheets(bbk).Range("L2").End(xlDown).Rows '←実行時エラー'9'
For dc = 2 To a
For dct = 12 To dc + 10
Workbooks("ブックA.xls").Worksheets("Sheet1").Range("L" & dc).Copy _
Workbooks("ブックA.xls").).Worksheets("Sheet1").Range("C" & dct)
Next dct
Next dc

恐らく他にも悪いところはあるかと思いますが、
どうかご教授をおねがいします。

A 回答 (3件)

sub macro1()


dim i as long, j as long
i = 2
j = 12
do until worksheets("コピー元").cells(i, "L") = ""
worksheets("貼り付け先").cells(j, "C").value = worksheets("コピー元").cells(i, "L").value
i = i + 1
j = j + 10
loop
end sub


sub macro2()
dim i as long
for i = 2 to worksheets("コピー元").range("L65536").end(xlup).row
worksheets("貼り付け先").cells(10*(i - 1)+2, "C").value = worksheets("コピー元").cells(i, "L").value
next i
end sub


sub macro3()
dim c as long, h as range
c = 2
for each h in worksheets("コピー元").range("L2:L" & worksheets("コピー元").range("L65536").end(xlup).row)
c = c + 10
h.copy destination:=worksheets("貼り付け先").cells(c, "C")
next
end sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

同じ処理でもこんなに表現方法があるのですね。
改めて奥の深さを痛感いたしました。

この中で最も行数が少ないmacro2をいただきます。

ありがとうございました。

お礼日時:2011/04/13 22:32

こんばんは!


コピー&ペーストのコードではないのですが・・・
一例です。

↓のコード内でBook1 は「ブックA」に! Book2は「ブックB」と実際のBook名に変更してマクロを実行してみてください。

Sub test()
Dim i As Long
Dim ws1, ws2 As Worksheet
Set ws1 = Workbooks("Book1.xls").Worksheets("sheet1") '←Book名は適宜変更
Set ws2 = Workbooks("Book2.xls").Worksheets("sheet1") '←こちらのBook名も適宜変更
ws2.Cells(12, 3) = ws1.Cells(2, 12)
For i = 3 To ws1.Cells(Rows.Count, 12).End(xlUp).Row
If ws1.Cells(i, 12) = "" Then Exit For
ws2.Cells(Rows.Count, 3).End(xlUp).Offset(10) = ws1.Cells(i, 12)
Next i
End Sub

こんな感じではどうでしょうか?m(__)m
    • good
    • 0

Worksheets(bbk).Range("L2").


の『bbk』って何でしょう?
その後の、ループ内では、
Workbooks("ブックA.xls").Worksheets("Sheet1").
と、正しくシート名を記述していますよね。

この回答への補足

ご指摘ありがとうございます。

お恥ずかしい限りですが、
bbk="ブックA.xls"ですが、直し忘れておりました。

補足日時:2011/04/13 21:47
    • good
    • 0

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