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

表1(A1:A20)に飛び飛びに入ったデータを表2(E11:E30)に上から順に空白が無いように転記するマクロは下記の通りなんとか作れました。
ただし、これが正しいやり方かどうかは自信がありませんのでもっといい方法があればご教示ください。
次にこれが、表1がA1:B10と2列になっており、表2も同じくE11:D20と2列になっている場合のやり方(E11から始まりE20まできたら次はD11以降に転記する)が見当がつきません。どのように記述すればいいのでしょうか?

Sub 転記()
Dim i As Integer, n As Integer
n = 10
With Worksheets("DATA1")
For i = 1 To 20
If .Range("A" & i) <> "" Then
n = n + 1
.Range("E" & n) = .Range("A" & i)
End If
Next i
End With
End Sub

よろしくお願いします。

A 回答 (3件)

短くなるように


Sub test01()
Dim c As Range
Dim r(3)
r(1) = 1: r(2) = 1
For Each c In Worksheets("sheet1").Range("a1:b10")
If c = "" Then
Else
Worksheets("sheet2").Cells(r(c.Column), c.Column) = c
r(c.Column) = r(c.Column) + 1
End If
Next
End Sub
'--------
Sheet1が何列になろうとも
(A)Dim r(3)の3を4等と、r(2)=1のところをr(3)=1、・・などと増やす。
(B)Range(A1:N50)等と増やす
だけで手直しが少ないです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
それぞれの列だけをみれば上に詰まったのですが、残念ながら、列をまたいではなりませんでした。

お礼日時:2003/05/16 14:47

こんにちは。

私はEXCELの機能をなるべくそれを生かすようにします。たとえば、ワークシート関数をつかって、次のようにFor-Next文を廃止できますね。

Sub 転記()
Range("E11").FormulaR1C1 = "=INDEX(R[-10]C[-4]:R[8]C[-4],ROW()-10,1)"
Range("E11").AutoFill Destination:=Range("E11:E20"), Type:=xlFillDefault
Range("E11:E20").Value = Range("E11:E20").Value
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
でも残念ながら思った様にはなりませんでした。

お礼日時:2003/05/16 14:46

プログラムなんて動けばいいのです。


分かりやすさは、その次。

Dim i As Integer, n As Integer
Dim a,b as string
Dim i2 As Integer, n2 As Integer
n = 10
a="A"
b="E"
i2=0
n2=0
With Worksheets("DATA1")
For i = 1 To 20
if i=11 then
a="B"
i2=10
end if
If .Range(a & i - i2) <> "" Then
n = n + 1
if n=21 then
b="D"
n2=10
end if
.Range(b & n - n2) = .Range(a & i - i2)
End If
Next i
End With
End Sub

未確認ですが・・・。

あと cells を使う方法もあります。
    • good
    • 0
この回答へのお礼

おそくなってすみません。
出来ました!
なるほど、こういう方法なんですね。ありがとうございました。

お礼日時:2003/05/16 14:45

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